簡體   English   中英

用於匹配一組單詞的正則表達式

[英]Regex for matching a set of words

有沒有辦法匹配句子中的一組單詞?

要求是我想檢查一個句子是否包含以下單詞popopobox 但它不應該捕獲帖子或沙盒。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM