2016-10-11 98 views
2

我有一个正则表达式模式,可以在大约50%的情况下捕捉我想要的内容,我发现它与它不匹配的情况与字符串中的空格有关。这是与JavaScript正则表达式BTW。复杂的正则表达式模式不能识别空格?

正则表达式:

/\[url="https?:\/\/([a-z0-9-]+\.)*cnn\.com\/newsreel\/showreel\.php\?id=?([^\s]*[^.])?\"\]([^\s]*[^.])\[\/url\]/gi

字符串匹配

A)[url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test123[/url]

B)[url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test 1 2 3[/url]

现在,如果我尝试运行ŧ他在A上的模式,它工作A - 好。但在B上,由于所有的空间,它失败了。

我认为这与我的第3匹配组([^\s]*[^.])有关,我猜这不是空格。任何人有任何想法,我怎样才能让它匹配空格以及?

谢谢!

回答

0

([^\s]*[^.]) 

更改第三匹配组

(.*[^.]) 

即,你.*(零个或多个字符)替换[^\s]*(零个或多个非空白字符)。

请注意,这也将允许其他空白字符,如制表符和潜在的换行符,这取决于如何使用正则表达式。如果这太松,可以选择[\S ]*(零个或多个非空白字符或常规空格字符)。

+0

你破解它,非常感谢! – Mark

+0

其实我遇到了一个更多的测试问题,它捕获多余的字符。我将如何使用你的[\ S] *的其他建议? – Mark

+0

使用'([\ S] * [^。])'作为第三个匹配组。 –