0

やった

temp = '(test)';
temp.match(temp);

そして戻ってきた

0:'test'
1:'test'

括弧はどこに行きましたか?

アップデート:

regexpal.com でテストしたところ、同様のことがわかりました。

ただし、{} への切り替えには同じ懸念はありませんでした。

明確化

temp は文字列であることを「意図」しています。なぜそれが他のものと見なされるのかわかりません。

4

3 に答える 3

2

括弧は、正規表現のメタ文字 (具体的には括弧をキャプチャする) です (文字列をメソッドに渡すと、match暗黙的に正規表現に変換されることに注意してください)。それらを文字通りに解釈したい場合は、それらをエスケープする必要があります(文字列を扱っているため、正規表現に変換されたときにまだ存在するようにエスケープ文字もエスケープする必要があります…そしてそれまでに正規表現は元の文字列に一致します)。

于 2013-04-07T16:38:47.507 に答える
1

への引数.match()は正規表現として扱われます。括弧は、そのコンテキストで何かを意味するメタ文字です。具体的には、一致した文字列の一部をグループ化します。したがって、正規表現(test)は部分文字列「test」と一致しました。戻り値は、一致全体を配列の最初の要素として、最初のグループを 2 番目の要素として返します。この場合、グループは一致した部分文字列全体をカバーしているため、それらは同じです。

これは、MDN のドキュメントですぐに解決できるようなものです。

パラメーター

regexp
正規表現オブジェクト。非 RegExp オブジェクト obj が渡された場合、new RegExp(obj) を使用して暗黙的に RegExp に変換されます。

于 2013-04-07T16:39:17.480 に答える
0

これを行う必要があります:

temp = '\(test\)';
temp.match(temp);

() は正規表現でグループを定義するためです。詳細については、こちらをご覧ください: http://www.regular-expressions.info/brackets.html

() は正規表現で使用される文字です。.*[] などと同じです。そのため、() は返されません。上記の例で行ったことは、それらをエスケープすることです。したがって、正規表現はそれをグループ化として認識しません。

アップデート:

それはこのように動作します:

"(test)".match(/\(test\)/);

文字列を作成し、別の正規表現オブジェクトを持っている場合。

于 2013-04-07T16:38:36.267 に答える