如果单词包含PRP,则此正则表达式匹配空格之间的所有字符。
如果它们包含PRP,但在任何情况下都包含me,我如何才能使其匹配所有的单词或介于白色之间的字符。
所以匹配所有包含PRP的单词,但不包含我或我。
下面是匹配包含PRP:\S*PRP\S*的单词的正则表达式
发布于 2014-06-17 16:24:55
您可以对此使用负面展望:
(?:^|\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发布于 2014-06-17 17:17:56
与其使用复杂的正则表达式(这对几乎所有正在阅读的人来说都是令人困惑的),不如将代码分成两部分,将单词分割成数组,然后用不想要的东西过滤结果。
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']为了一个非常好的理由,为什么这是重要的,想象一下,如果你想要增加更多的逻辑。在修改复杂的正则表达式使其更加复杂时,您更有可能犯错误,这样做是用简单的逻辑完成的,无论您添加了多少谓词,在读取每个谓词时都是非常有意义的。
https://stackoverflow.com/questions/24268809
复制相似问题