除非它是特定模式的一部分,否则我如何构造一个匹配单词的正则表达式?

时间:2017-11-07 12:56:24

标签: javascript regex

我有一个正则表达式,但我希望匹配'android'而不是'mobile'

(?=.*android)(?!.*mobile)

但是如果字符串是这样的模式 - “my-custom-android”,我不希望它与我的正则表达式有任何匹配。

For example, "my-custom-android some thing else" should not have a match with the regex. 

**我正在寻找Javascript支持的正则表达式,JS **不支持当前的lookbehind

2 个答案:

答案 0 :(得分:1)

您可以在没有后视的情况下执行检查:

var strs =[ "my-custom-android some thing else", "my-custom-android mobile some thing else android", "mobile android", "android mobile", "another android story" ];
var patt = /(my-custom-)?android(?!.*mobile)/i;
for (var str of strs) {
  var res = str.match(patt);
  if(res && res[1] === undefined)
  { // do something
     console.log(str, "=> MATCHED");
  } else {  // DON'T do anything
    console.log(str, "=> NOT MATCHED"); 
  }
}

/(my-custom-)?android(?!.*mobile)/i模式搜索任何my-custom-(1或0次重复),然后搜索android,此子字符串后面的任何地方都没有mobilemy-custom-部分被捕获到第1组,并且可以在找到匹配后进行评估。如果此组未定义,则表示在android之前文本丢失且它是有效匹配。否则,我们应该在那场比赛中失败。

答案 1 :(得分:-1)

使用负面的lookbehind尝试以下模式:

(?<!my-custom-)android(?!.*mobile)