JavaScriptの正規表現における複数行モード
正規表現は、複数行の文字列を扱う際に特有の性質があります。 以下の文字列(通常の文字、改行文字、タブ文字を含む)を例に、 それらの性質を見ていきましょう:
let str = `111
222
333
444`;
改行文字
改行文字は、パターン '\n' を使用してマッチさせることができます:
let res = str.replace(/\n/g, '!');
結果、変数には以下の文字列が格納されます (行間の空白はタブ文字です):
`111! 222! 333! 444`;
タブ文字
タブ文字は、パターン '\t' を使用してマッチさせることができます:
let res = str.replace(/\t/g, '!');
結果、変数には以下の文字列が格納されます:
`
111
!222
!333
!444
`;
ドットの動作
パターン '.' は、複数行の文字列において改行文字をマッチしません:
let res = str.replace(/./g, '!');
結果、変数には以下の文字列が格納されます:
`
!!!
!!!!
!!!!
!!!!
`;
任意の文字
複数行文字列内の全ての文字(改行文字を含む)をマッチさせるには、
[\s\S] という組み合わせを使う巧妙な方法があります:
let res = str.replace(/[\s\S]/g, '!');
結果、変数には以下の文字列が格納されます:
`!!!!!!!!!!!!!!!!!!`;
キャレット (^)
修飾子 'm' を使用して複数行モードを有効にすることができます。
このモードでは、キャレット (^) が各行の先頭にマッチします:
let res = str.replace(/^/gm, '!');
結果、変数には以下の文字列が格納されます:
`
!111
!222
!333
!444
`;
ダラー ($)
パターン '
は、複数行モードでは各行の末尾にマッチします:
let res = str.replace(/$/gm, '!');
結果、変数には以下の文字列が格納されます:
`
111!
222!
333!
444!
`;
実践問題
以下の文字列が与えられます:
`
abc
def
ghi
jkl
`;
この文字列を以下のように変換する正規表現を書いてください:
`
abc!
def!
ghi!
jkl!
`;
以下の文字列が与えられます:
`
abc
def
ghi
jkl
`;
この文字列を以下のように変換する正規表現を書いてください:
`
! abc
! def
! ghi
! jkl
`;
以下の文字列が与えられます:
`
abc
def
ghi
jkl
`;
この文字列を以下のように変換する正規表現を書いてください:
`!
abc
def
ghi
jkl
!`;
以下の文字列が与えられます:
`
abc
def
ghi
jkl
`;
この文字列を以下のように変換する正規表現を書いてください:
`!
! abc
! def
! ghi
! jkl
!`;
以下の文字列が与えられます:
`
abc
def
ghi
jkl
`;
この文字列を以下のように変換する正規表現を書いてください:
`!
abc!
def!
ghi!
jkl!
!`;
以下の文字列が与えられます:
`
abc
def
ghi
jkl
`;
この文字列を以下のように変換する正規表現を書いてください:
`
!abc
!def
!ghi
!jkl
`;