有没有办法匹配句子中的一组单词?
要求是我想检查一个句子是否包含以下单词po
或p.o
或p.o
或box
。但它不应该抓住帖子或沙箱。
po - >错误
发布 - >成功
框 - >错误
hippo - >更迭
提前致谢
答案 0 :(得分:1)
使用\ b来捕捉单词边界。
正则表达式片段:
\b(po|p\.o)\b
仅在句子包含单词po或单词p.o。
时匹配答案 1 :(得分:1)
如果一个句子包含单词“po”,“po”或“box”的任意组合将返回的函数(我也包括了这些单词的大小写):jsfiddle
function containsPObox(sentence) {
var matches = sentence.match(/\bp\.?o\b\.?|\b(box)\b/gi);
return (matches && matches.length > 0)?true:false;
}
关于正则表达式:/\bp\.?o\b\.?|\b(box)\b/gi
打破它......
\b
- >单词边界(空格或句点之前的空格或最后一个字母后面的第一个字母)
p
- > 'P'
\.?
- >可选'。'
o
- > 'O'
\b
- >字边界
\.?
- >可选'。'
|
- > “或”
\b
- >字边界
(box)
- > '盒子'
\b
- >字边界
/g
- >句子中的任何地方
i
- >不区分大小写
答案 2 :(得分:1)
应该这样做:
/\b(p\.?o|box)\b/g
\b
匹配单词组的开头( . . . )
设置匹配组p\.?o
是第一个模式,匹配“p”,“o”与“p”之后的可选句点(“。”)匹配box
是第二个模式,只匹配单词“box”:)\b
匹配单词组的结尾g
使模式“贪婪”,以便尽可能多地匹配模式如果您希望它不区分大小写,请在模式的末尾包含“i”参数:
/\b(p\.?o|box)\b/gi <--- right here
修改:为了简化模式,我删除了“o”之后的\.?
。自“。”必须是模式中的最后一个字符,匹配“p.o”没有区别。和“p.o”。 。 。如果“p.o”之后的下一个字符是句号或空格,则它应该匹配。如果它是一个字母(例如)它不应该,但存在尾随“。”与支票无关。
答案 3 :(得分:0)
喜欢sh54的回复,但没有|块。
\b(p\.?o\.?)\b
这将是数学po,p.o。,框以及包含框的任何组合。