匹配字符串中不以省略号结尾的单词

Match word in a string that does not end in ellipsis

本文关键字:省略号 结尾 单词 字符串      更新时间:2023-09-26

假设我有以下字符串:

ZD:123123 ZD:213123 ZD:2e213 [ZD:213123] [ZD#221313] ZD:234...

除了ZD:234...之外,我想对所有出现的进行模式匹配,因为我不想要任何带有省略的单词。

这个模式在JavaScript:中对我来说做得很好

/('[|'(|)ZD[:#]'w+(']|')|)/g

然而,它仍然捕获了ZD:234...ZD:234部分,我绝对不希望它这样做

如何阻止regex执行此操作?

一个简单的解决方案是使用负前瞻:

/('[|'(|)ZD[:#]'w+'b(']|')|)(?!'.'.'.)/g 

注意,我还添加了'b以避免在ZD:23上匹配。

简化一点:

/['[(]?ZD[:#]'w+'b['])]?(?!'.'.'.)/g

如果您想要匹配的括号(无[ZD:123)):

/(?:ZD[:#]'w+|'[ZD[:#]'w+']|'(ZD[:#]'w+'))'b(?!'.'.'.)/g

剥猫皮的方法不止一种。通过使用更简单的正则表达式,以下内容将在更多浏览器中工作:

function trim(s) {
  return s.replace(/^ | $/g,'').replace(/'s+/g,' ');
}
var x = 'ZD:123123 ZD:213123 ZD:2e213... [ZD:213123] [ZD#221313] ZD:234...';
alert(
  trim(x.replace(/(^| )[^ ]+['.]{3}( |$)/g,' ')).split(/'s+/)
);
/* shows: ZD:123123,ZD:213123,[ZD:213123],[ZD#221313] */

它删除了以…结尾的任何空格分隔的字符"单词"。。。然后在空间上分裂。