如果单词包含PRP
,则此正则表达式匹配空格之间的所有字符。
如果匹配所有单词或whitepsace之间的字符(如果它们包含PRP
),如果它们在任何情况下都包含me
,则不能与之匹配。
所以匹配包含PRP但不包含ME或我的所有单词。
以下是匹配包含PRP的单词的正则表达式:\S*PRP\S*
答案 0 :(得分:2)
您可以使用负向前瞻:
(?:^|\s)((?!\S*?(?:ME|me))\S*?PRP\S*)
PS :使用群组#1
查找匹配的字词。
<强>代码:强>
var re = /(?:^|\s)((?!\S*?(?:ME|me))\S*?PRP\S*)/;
var s = 'word abcPRP def';
var m = s.match(re);
if (m) console.log(m[1]); //=> abcPRP
答案 1 :(得分:1)
不要使用复杂的正则表达式,这对于几乎所有读过它的人都会感到困惑,为什么不将代码分成两部分,将单词分成数组并过滤掉结果你不想要的东西?
function prpnotme(w) {
var r = w.match(/\S+/g);
if(r == null)
return [];
var i=0;
while(i<r.length) {
if(!r[i].contains('PRP') || r[i].toLowerCase().contains('me'))
r.splice(i,1);
else
i++;
}
return r;
}
console.log(prpnotme('whattttttt ok')); // []
console.log(prpnotme('MELOLPRP PRPRP PRPthemeok PRPmhm')); // ['PRPRP', 'PRPmhm']
有一个很好的理由,为什么这很重要,想象一下你是否想要添加更多逻辑。在修改复杂的正则表达式时,你更容易犯错,使其变得更加复杂,这样,无论你添加了多少,在阅读每个谓词时都能完全理解它的简单逻辑。上。