【发布时间】:2019-11-24 14:30:11
【问题描述】:
我有一个解决一个复杂的问题: 我想从可能的长文本中过滤掉子字符串。某些关键字表示子字符串。仅当关键字前面至少有一个字符(不是空格或其他关键字)时,才应该匹配。然后他们关键字前面的每个字符也应该包含在匹配中。为此,我想在 JavaScript 中使用正则表达式。
我的关键字是:“:yellow:”、“:black:”、“:green:”、“:blue:”、“:red:”
例如,我有这样的文本:" :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);
这是我的输出: ['绿色:aba:红色:', 'gd efg:蓝色::黄色:', 'sdg:red: sea gea e:black:' ]
但我想要这个:
['aba:red:', 'gd efg:蓝色:', 'sdg:红色:', 'sea gea e:black:' ]
【问题讨论】:
标签: javascript regex