gpt4 book ai didi

javascript - JS 正则表达式 : match list of phrases exactly (including hash symbols)

转载 作者:行者123 更新时间:2023-12-03 05:58:11 26 4
gpt4 key购买 nike

我有一个短语数组,并且正在尝试检测一串文本是否包含完整的短语。我目前正在使用以下正则表达式:

var arrOfWords = ['foo', 'bar', 'foo bar']
var regEx = new RegExp('\\b(' + arrOfWords.join('|') + ')\\b', 'gi')

console.log(regEx)
/\b(foo|bar|foo bar)\b/gi

我使用 \b 因为我不想包含子字符串,而是包含完整的单词/短语,即“foo”不应与“foobar”匹配,而应与“I like foo”匹配

这很有效,但是,单词边界 \b 会忽略以 # 开头的短语,因为 \b 的边界开始于字母数字字符。

因此,如果“#hashtag”在数组中,则仅当被测试的字符串具有“hashtag”而不是“#hashtag”时才会匹配

我真正想要的是一个正则表达式,它匹配数组中指定的整个短语,包括符号和哈希。或者也许有一个解决方案可以解决这个问题。

有人能指出我正确的方向吗?谢谢。

最佳答案

不幸的是,JS 没有后向功能,因此如果不将该字符包含到匹配中,就不可能匹配前一个字符的属性(\b 除外,正如您所注意到的,用途非常有限)。如果您可以接受,您可以:

/(?:^|\W)(foo|bar|foo bar|#hashtag)(?=$|\W)/

并且仅处理第一个捕获组。如果您只想要完整的单词/短语,这保证不会重叠,因为保证有非单词分隔符。

注意:如果 arrOfWords 包含具有正则表达式含义的字符的字符串,它们将被如此解释;所以 foo.bar 将匹配 foosbar。请参阅here关于如何避免它。

Hey, this is 90% there for me, thanks. Just to nitpick, I noticed that if arrOfWords contains #hashtag, it will match with ##hashtag in the string. Is there a way of matching only if the number of hashes is exact?

然后您需要明确什么是单词,什么是非单词字符,并将 \W 替换为该字符。

/(?:^|[^\w#'-])(foo|bar|foo bar|#hashtag)(?=$|[^\w#'-])/

关于javascript - JS 正则表达式 : match list of phrases exactly (including hash symbols),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39843255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com