利用REGEX模式:
[^?!.s][^?!.]*?b([Cc]at|[Dd]og|[Bb]ird)b[^?!.]*[.?!]
将整个句子与上面包含的单词进行匹配,即使该句子跨越多行。
然而,我发现,如果感兴趣的词是句子中的第一个,它将不匹配。
例如:那只鸟死了。将匹配。三伏天结束了。不会。我要找的句子通常在语法上是不完整的,就像第二个列出的一样,但开头是大写,后面是句号结构。
您可以使用
(?=s)[^?!.]*?b([Cc]at|[Dd]og|[Bb]ird)b[^?!.]*[.?!]
b[^?!.]*?b([Cc]at|[Dd]og|[Bb]ird)b[^?!.]*[.?!]
在第一个正则表达式中,第一个匹配的字符必须是非空白字符,因为(?=s)
是一个正前瞻,它与紧跟空白字符的位置匹配。
第二变体中的b
更具体,并且匹配字符串/非单词字符的开头和单词字符之间的位置,或者单词字符和非单词字符/字符串的结尾之间的位置。
请注意,在JavaScript中,b
单词边界不支持Unicode,如果您需要完全的Unicode单词边界支持,则需要一个解决方法,请参阅使用JavaScript替换文本字符串中的某些阿拉伯单词。