[英]How to match overlapping substrings as whole words (with multiple occurence) with regex?
我尝试遵循此答案,但是当同一单词多次出现时,它将不起作用。
我想在字符串"site web site"
统计site
和site web
的出现。
我尝试使用以下代码:
var regex = /(?:\\b)((?=(site))(?=(site web)))(?:\\b)/; var string = 'site web site'; var match = string.match( regex ).filter(Boolean); console.log(match)
这段代码返回["site", "site web"]
但我希望它返回["site", "site", "site web"]
因为site
在字符串中出现了两次。
注意:就我而言,我有数百个单词要匹配。
另外,如果输入是site webS site
,则预期输出是["site", "site"]
。 输入应为带有标点符号的完整文本,以将其考虑在内( .,?!/;
...)。
如果您需要查找单词列表中的单词是否出现在字符串中并且您有数百个单词,则需要使用良好的字符串搜索算法。 我认为对于您的用例,最好的选择是Aho Corasick算法。 它实现了接近O(n)的复杂度,这比使用正则表达式要快得多。
检查此链接:
我用过它,可以说您的工作速度非常快。 如果您决定使用它,则github中提供了该算法的多种实现。 您可以搜索一种适合您的编程语言的语言并使用它。
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.