我可以写一个正则表达式,其中一个符号匹配两次吗?

时间:2012-05-19 15:41:23

标签: javascript regex

我在javascript中使用正则表达式匹配单词。以下表达式使用空格来分隔潜在的匹配项:

/(\W)(foo)(\W)/g

这在大多数情况下都有效,但是当有两个匹配由一个空格分隔时,它会失败。 (例如“foo foo”)我认为这是因为分隔它们的空间是第一场比赛的最后\W和第二场比赛的第一场。

有没有办法修改此表达式以适用于此边缘情况?

3 个答案:

答案 0 :(得分:3)

您可以使用\b代替\W。它匹配零宽度字边界\w\W之间的边界或字符串的开头/结尾,而\W匹配字符这可能不存在于字符串的开头或结尾。

答案 1 :(得分:1)

Javascript正则表达式已经预见到了,所以你可能会做这样的事情:

/(\W)(foo)(?=\W)/g

我不认为外观可用,但有other techniques that have the same effect

当然,这在功能上是不同的,因为前瞻不会捕获,因此它取决于您的问题的性质。这里的要点不是它没有捕获,而是它匹配;从而避免你的问题。

答案 2 :(得分:-2)

尝试一下,我认为它适合你:

/(\W)(foo| )(\W)/g

这会告诉正则表达式在两个foo之间匹配whitespace\W