假设我有以下字符串:
ZD:123123 ZD:213123 ZD:2e213 [ZD:213123] [ZD#221313] ZD:234...
我希望模式匹配每次出现除了 ZD:234...
,因为我不想要任何有缺席的单词。
这种模式在JavaScript中很适合我:
/(\[|\(|)ZD[:#]\w+(\]|\)|)/g
但是,它仍会捕获ZD:234
ZD:234...
部分,我绝对不希望这样做。
如何阻止正则表达式执行此操作?
答案 0 :(得分:5)
一个简单的解决方法是使用否定前瞻:
/(\[|\(|)ZD[:#]\w+\b(\]|\)|)(?!\.\.\.)/g
请注意,我还添加了\b
以避免在ZD:23
上匹配。
有点简化:
/[\[(]?ZD[:#]\w+\b[\])]?(?!\.\.\.)/g
如果您需要匹配的括号(无[ZD:123)
):
/(?:ZD[:#]\w+|\[ZD[:#]\w+\]|\(ZD[:#]\w+\))\b(?!\.\.\.)/g
答案 1 :(得分:0)
给猫皮肤涂抹的方法不止一种。通过使用更简单的正则表达式,以下内容将适用于更多浏览器:
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] */
它删除以...结尾的字符的任何空格分隔的“单词”,然后在空格上分割。