やった
temp = '(test)';
temp.match(temp);
そして戻ってきた
0:'test'
1:'test'
括弧はどこに行きましたか?
アップデート:
regexpal.com でテストしたところ、同様のことがわかりました。
ただし、{} への切り替えには同じ懸念はありませんでした。
明確化
temp は文字列であることを「意図」しています。なぜそれが他のものと見なされるのかわかりません。
やった
temp = '(test)';
temp.match(temp);
そして戻ってきた
0:'test'
1:'test'
括弧はどこに行きましたか?
アップデート:
regexpal.com でテストしたところ、同様のことがわかりました。
ただし、{} への切り替えには同じ懸念はありませんでした。
明確化
temp は文字列であることを「意図」しています。なぜそれが他のものと見なされるのかわかりません。
括弧は、正規表現のメタ文字 (具体的には括弧をキャプチャする) です (文字列をメソッドに渡すと、match
暗黙的に正規表現に変換されることに注意してください)。それらを文字通りに解釈したい場合は、それらをエスケープする必要があります(文字列を扱っているため、正規表現に変換されたときにまだ存在するようにエスケープ文字もエスケープする必要があります…そしてそれまでに正規表現は元の文字列に一致します)。
への引数.match()
は正規表現として扱われます。括弧は、そのコンテキストで何かを意味するメタ文字です。具体的には、一致した文字列の一部をグループ化します。したがって、正規表現(test)
は部分文字列「test」と一致しました。戻り値は、一致全体を配列の最初の要素として、最初のグループを 2 番目の要素として返します。この場合、グループは一致した部分文字列全体をカバーしているため、それらは同じです。
これは、MDN のドキュメントですぐに解決できるようなものです。
パラメーター
regexp
正規表現オブジェクト。非 RegExp オブジェクト obj が渡された場合、new RegExp(obj) を使用して暗黙的に RegExp に変換されます。
これを行う必要があります:
temp = '\(test\)';
temp.match(temp);
() は正規表現でグループを定義するためです。詳細については、こちらをご覧ください: http://www.regular-expressions.info/brackets.html
() は正規表現で使用される文字です。.*[] などと同じです。そのため、() は返されません。上記の例で行ったことは、それらをエスケープすることです。したがって、正規表現はそれをグループ化として認識しません。
アップデート:
それはこのように動作します:
"(test)".match(/\(test\)/);
文字列を作成し、別の正規表現オブジェクトを持っている場合。