gpt4 book ai didi

javascript - 使用 Regex 过滤掉 Javascript 文本中包含关键字的子字符串

转载 作者:行者123 更新时间:2023-11-30 09:13:11 26 4
gpt4 key购买 nike

我有一个解决复杂问题的方法:我想从可能的长文本中过滤掉子字符串。有一些关键字表示子串。仅当关键字前面至少有一个字符(不是空格或不同的关键字)时才匹配。然后他们关键字前面的每个字符也应该包含在匹配中。为此,我想在 JavaScript 中使用正则表达式。

我的关键字是:“:黄色:”,“:黑色:”,“:绿色:”,“:蓝色:”“:红色:”

例如我有这样的文本:“:green: aba :red: gd efg:blue: :yellow: sdg:red: sea gea e :black:”

现在我想在这个字符串上使用 match() 和一个给我这些匹配的 re:"aba :red:", "gd efg:blue":, "sdg:red:", sea gea e :black :

:green: 开头不应该匹配,因为它前面没有字符。 :yellow: 也不应匹配,因为它前面有一个不同的关键字(在本例中为 :blue:)

我曾尝试使用否定先行表达式(例如 (?!))来防止在关键字位于其他关键字之前时进行匹配。但它并没有给我想要的结果。

    /((?!(:yellow:|:black:|:green:|:blue:|:red:))\S+\s*)+(:yellow:|:black:|:green:|:blue:|:red:)/g

let ar1 = text1.match(re1);

console.log(ar1);

这是我的输出:['绿色:阿巴:红色:', 'gd efg:蓝色::黄色:', 'sdg:red: sea gea e :black:']

但我想要这个:

['阿巴:红色:', 'gd efg:蓝色:', 'sdg:红色:', 'sea gea e :black:']

最佳答案

你可以通过将 : 放在它外面来缩短你的交替,而不是匹配 \S+ 你可以不匹配空白字符或 : 使用 negated character class .

要匹配多个“单词”,您可以重复匹配空格并再次使用否定字符类。

(?!:(?:yellow|black|green|blue|red):)[^\s:]+(?: [^\s:]+)*\s*:(?:yellow|black|green|blue|red):

解释

  • (?! 否定前瞻,断言直接右边的不是
    • :(?:yellow|black|green|blue|red): 匹配 :
    • 之间列出的任何一个
  • ) 关闭负前瞻
  • [^\s:]+ 匹配 1+ 次非空白字符或 :
  • (?: [^\s:]+)* 重复 0+ 次匹配空格,然后 1+ 次不是空白字符或 :
  • \s* 匹配 0+ 个空白字符
  • :(?:yellow|black|green|blue|red): 匹配 :
  • 之间列出的任何一个

Regex demo

const regex = /(?!:(?:yellow|black|green|blue|red):|\s)[^\s:]+(?: [^\s:]+)*\s*:(?:yellow|black|green|blue|red):/g;
const str = ` :green: aba :red: gd efg:blue: :yellow: sdg:red: sea gea e :black: `;
console.log(str.match(regex));

关于javascript - 使用 Regex 过滤掉 Javascript 文本中包含关键字的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047334/

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