gpt4 book ai didi

正则表达式仅匹配包含序列的任何单词一次

转载 作者:行者123 更新时间:2023-12-02 09:09:16 25 4
gpt4 key购买 nike

我需要一个正则表达式来匹配包含序列“ab”一次的任何单词。所以它应该匹配这些:

  • aaaabaaa
  • ab
  • 可憎

而不是这些:

  • 某事
  • 阿巴
  • 巴巴巴

使用我当前的正则表达式 \w*ab\w* 我得到了第一个列表的所有内容,但也得到了第二个列表的第二个列表,如下面的代码片段所示。我如何指定它仅在包含一个“ab”时才匹配?

let text = "aaaabaaa ab abomination something abab bacba";

console.log(text.match(/\w*ab\w*/ig));

我搜索了一段时间,没有找到解决方案,但如果这是某种重复,请告诉我,我将删除该问题。

最佳答案

您可以使用以单词边界 (\b) 开头的正则表达式,然后使用负向前查找,以避免匹配具有两个不连续 ab 字母序列的单词:

\b(?!\w*ab\w*ab)\w*ab\w*

请参阅regex demo

详细信息

  • \b - 字边界
  • (?!\w*ab\w*ab) - 如果紧邻当前位置的右侧有两次 0+ 单词字符的重复,则匹配失败的负向前瞻和ab
  • \w* - 0+ 个单词字符
  • ab - ab 子字符串
  • \w* - 0+ 个单词字符。

请注意,在某些情况下,您只需要匹配字母,然后更改 \w 就有意义了(它匹配字母、数字和下划线,并且可能匹配更多内容,如果它是 Unicode 识别)到 [^\W\d_][[:alpha:]][a-zA-Z]\p{L} 等,具体取决于您的需要和正则表达式引擎。

关于正则表达式仅匹配包含序列的任何单词一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54502725/

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