[英]Regex for matching a set of words
有沒有辦法匹配句子中的一組單詞?
要求是我想檢查一個句子是否包含以下單詞po
或po
或po
或box
。 但它不應該捕獲帖子或沙盒。
po --> 錯誤
發布->成功
框 --> 錯誤
河馬->成功
提前致謝
一個 function 如果句子包含單詞“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
-> 不區分大小寫
這應該這樣做:
/\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”之后。 自從“。” 必須是模式中的最后一個字符,匹配“po”和“po”沒有區別。 . . 如果“po”之后的下一個字符是句點或空格,則應該匹配。 如果它是一個字母(例如)它不應該,但尾隨“。”的存在。 真的和支票無關。
使用 \b 捕捉單詞邊界。
正則表達式片段:
\b(po|p\.o)\b
僅當句子包含單詞 po 或單詞 po 時才會匹配
像 sh54 的回應,但沒有 | 堵塞。
\b(p\.?o\.?)\b
這將計算 po、po、box 以及包含 box 的任何組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.