1

この正規表現が一致しない理由を誰か教えてください。

var matches = ' @test'.match(new RegExp('(\s+|^)(@|!)(.*?)(\s+|$)', 'g'));

これは一致します:

var matches = '@test'.match(new RegExp('(\s+|^)(@|!)(.*?)(\s+|$)', 'g'));

すでに指定しています\s+。では、なぜ一致しないのでしょうか。

4

1 に答える 1

5

\sは、正規表現リテラルではなく文字列から正規表現を構築しているため、空白の短縮形として認識されず、文字列内ではバックスラッシュを 2 倍にする必要があります。

したがって、使用する必要があります

var matches = ' @test'.match(new RegExp('(\\s+|^)([@!])(.*?)(\\s+|$)', 'g'));

また

var matches = ' @test'.match(/(\s+|^)([@!])(.*?)(\s+|$)/g);
于 2012-09-29T08:47:24.973 に答える