簡體   English   中英

正則表達式按前綴匹配句子中的單詞

[英]Regex to match words in a sentence by its prefix

我在 mongodb 查詢上有這個正則表達式來按前綴匹配單詞:

{sentence: new RegExp('^'+key,'gi')}

如果我希望它匹配至少有一個以key前綴開頭的單詞的句子,那么正確的正則表達式模式是什么? 例如:

如果我有一句話

“這是一只狗”

key是 'do' 時,它應該匹配那個句子,因為前綴 'do' 是 'dog' 的子字符串。

我的解決方案目前僅適用於句子的第一個單詞。 到目前為止,如果我輸入 't' 或 'th' 或 'this',它只匹配那個句子。 每當我輸入“i”(“is”的前綴)或“do”(“dog”的前綴)時,它都不會匹配該句子。

您可以使用表達式/\\bprefix\\w+/ 這應該匹配以"prefix"開頭的任何單詞。 這里的\\b代表一個單詞邊界, \\w是任何單詞字符。

如果你不想得到整個詞,你可以做/\\bprefix/ 如果你想把它放在一個字符串中,你還必須轉義\\ : '\\\\bprefix'

使用\\b來匹配單詞邊界:

\bdo

在 'nice dog' 中找到 'do',但與 ' much ado about nothing' 不匹配。

其他答案表明單詞邊界匹配很整潔,但意味着索引沒有得到有效使用。 如果您需要快速查找,您可能需要考慮添加一個字段“words”,將每個單詞分解,即

{sentence: "This is a dog",
  words: ["This", "is", "a", "dog"]}

words字段上放置索引后,您可以返回使用:

{words: new RegExp('^'+key,'gi')}

並且“do”的key現在將匹配此對象使用索引。

^匹配字符串的開頭(如果設置了多行標志,則匹配行的開頭)。

\\b匹配單詞邊界。

\\bdo匹配以“do”開頭的單詞。

所以對於你的例子:

{sentence: new RegExp('\\b'+key,'gi')}

(請注意,在 JavaScript 字符串中,您必須轉義反斜杠。)

如果您需要捕獲匹配項以找出與模式匹配的單詞,您需要將表達式括在括號中並添加一點以匹配單詞的其余部分:

new RegExp('(\\b' + key + '\\w*)','gi')

其中\\w是任何單詞字符, *是零個或多個。 如果您想要的單詞至少比key多一個字符,請使用+而不是*

有關更多詳細信息,請參閱網絡上的許多正則表達式指南,例如https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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