[英]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'
。
其他答案表明單詞邊界匹配很整潔,但意味着索引沒有得到有效使用。 如果您需要快速查找,您可能需要考慮添加一個字段“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.