更改正则表达式以匹配某些单词而不是包含PRP的所有单词

时间:2014-06-17 16:20:46

标签: javascript regex

如果单词包含PRP,则此正则表达式匹配空格之间的所有字符。

如果匹配所有单词或whitepsace之间的字符(如果它们包含PRP),如果它们在任何情况下都包含me,则不能与之匹配。

所以匹配包含PRP但不包含ME或我的所有单词。

以下是匹配包含PRP的单词的正则表达式:\S*PRP\S*

2 个答案:

答案 0 :(得分:2)

您可以使用负向前瞻:

(?:^|\s)((?!\S*?(?:ME|me))\S*?PRP\S*)

Working Demo

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']

有一个很好的理由,为什么这很重要,想象一下你是否想要添加更多逻辑。在修改复杂的正则表达式时,你更容易犯错,使其变得更加复杂,这样,无论你添加了多少,在阅读每个谓词时都能完全理解它的简单逻辑。上。