带有可选组的Javascript正则表达式匹配空字符串

时间:2012-01-10 04:41:35

标签: javascript regex

我正在尝试使用类似

的字符串
"[go]$$Bcm11 Prisoners:"

并匹配Bcm11部分。它的每一部分都是可选的(除技术上,如果出现m,那么,我正在使用正则表达式:

/([bBWw])?(c?)m?([0-9]*)/

不幸的是,这令人愉快地匹配空字符串。删除'?'或'*'获得正确的行为,但使该组件不可选。

有没有办法强制这个正则表达式匹配非空字符串?

3 个答案:

答案 0 :(得分:3)

使用前瞻(?=...)来确保字符串中有内容。 这样可以确保至少有一个允许的字符存在。

/(?=[BbWwcm0-9])([bBWw])?(c?)m?([0-9]*)/

但是,如果您可以为正则表达式添加^$甚至\b,性能会有很大提高。例如,

/\b(?=[BbWwcm0-9])([bBWw])?(c?)m?([0-9]*)\b/

确保您的匹配至少抓住整个单词,而不仅仅是(比方说)B

答案 1 :(得分:0)

当然告诉它使用lookahead and lookbehind查找$$和空格内的字符串。

答案 2 :(得分:0)

根据您的评论$$将永远存在。如果是这种情况,那么您可以简单地使用:

/\$\$([bBWw]?c?m?\d*)/