我正在尝试使用类似
的字符串"[go]$$Bcm11 Prisoners:"
并匹配Bcm11
部分。它的每一部分都是可选的(除技术上,如果出现m,那么,我正在使用正则表达式:
/([bBWw])?(c?)m?([0-9]*)/
不幸的是,这令人愉快地匹配空字符串。删除'?'或'*'获得正确的行为,但使该组件不可选。
有没有办法强制这个正则表达式匹配非空字符串?
答案 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*)/