0

これは、「Javascript:The Good Parts」本からの正規表現です。

//Make a regular expression object that matches a javascript string.
var my_regexp = new RegExp("\"(?:\\\\.|[^\\\\\\\"])*\"", 'g');

この[^\\\\\\\"]式は何に一致しますか?

4

2 に答える 2

3

"JavaScript では、文字列は(または'、この正規表現ではサポートされていない) で囲まれ\、別の意味を持つ文字をエスケープするために使用されます。

現在、はまたは[^\\\\\\\"]ではない文字の文字クラスです。ただし、エスケープが必要な正規表現を定義するために文字列リテラルを使用しているため、また文字列と正規表現の両方で特別な意味があるため、それらもエスケープする必要があります。\""\

\"        starting characters
\\"       escape `\` for regex
\\\"      escape `"` for regex
\\\\\\"   escape `\` for string
\\\\\\\"  escape `"` for string

'文字列または正規表現リテラルに使用すると簡単です。以下はすべて同じです。

new RegExp("\"(?:\\.|[^\\\\\\\"])*\"", "g");
new RegExp('"(?:\\.|[^\\\\\\"])*"', 'g');
/"(?:\.|[^\\\"])*"/g

実際、"正規表現では特別な意味を持たないため、エスケープする必要はありませんでした。

/"(?:\.|[^\\"])*"/g

また、 はまたはで.はないことに注意してください。したがって、構造は無意味です。これはエラーであり、意図されたものだと思います-つまり、任意の文字が続きます。元の場合は 2 つではなく4 つ必要になります。この修正がないと、式は のような文字列と一致しません。\"|\\.\\"ab\\c"

同様にサポートしたい場合は'、非常に複雑になるため、正規表現ではなく単純な文字ごとのパーサーを使用する必要があります。

正規表現リファレンス

于 2013-08-08T10:53:08.623 に答える