JavaScriptの文字列に対して.matchを使う際に'(‘の扱いでちょっと苦労したので忘れないようにメモ.
やりかた
(を\\(とエスケープする.
// 文字列に括弧(が含まれるか調べる string = "Hello world! (test)" string.match("\\(") // > ["("] // (マッチした)
JavaScriptはChromeの検証機能のConsoleタグを使って動作させてます.検証機能はいぜんブログでもちょっと紹介しました(Chromeの検証(デベロッパーツール)を使った)
このConsoleでは,変数名を入力して[Enter]すると変数の中身が表示されます.(関数の戻り値がそのまま出力されている?).いろいろ動作をためしてみるのに結構便利♪
解説
JavaScriptの文字列における\はエスケープ文字として扱われるため文字列の中に\を入力したい際には\\と入力する必要がある.
// good\night と入れたい. str = "good\night"; // > "good // > ight" // (\nが改行コードとして読み込まれた) str = "good\\night"; // > "good\night"
また,str.match()は正規表現が利用できる.この正規表現内で()は特別な意味を持つため,(をエスケープする必要がある.
-> \( としたい.
str = "hello (world)"; str.match("\\(wor"); // > ["(wor"] // (見つかった.)
つまり,’\’は文字列として利用する際にエスケープが必要で,'(‘は正規表現内で利用するのにエスケープが必要という2段階になっている.
他にも’?’,’^’,’*’,’$’などはエスケープが必要になる.
str = "例えば(・_・?)を検索する際には…"; pattern = "\\(・_・\\?\\)"; // > "\(・_・\?\)" (patternの中身) str.match(pattern); // > ["(・_・?)"] (見つかった)
まとめ
正規表現は必要に応じて調べてちょいちょい使うぐらいだったので,このような問題に対して何が悪いのか気づくのに時間がかかた….
でも,これで次回はすぐに気付ける.成長した!