不匹配正则表达式

时间:2013-04-24 14:50:45

标签: javascript regex

我正在使用此正则表达式/\s*?left:\s*?-?\d+\.?\d*px;/im来查找例如:left: 100.5px;

问题是它还发现margin-left: 100px;padding-left...我希望它与-left之类的字匹配,但匹配left

有什么想法吗?

编辑:我正在使用javascript。我为此做了一个简单的jsfiddle。 http://jsfiddle.net/WU7GV/3/目标是使“jupp”出现,但不是“nope”,在if-sentence中使用相同的正则表达式

5 个答案:

答案 0 :(得分:3)

选项1:使用开始锚点

/^left:\s*-?\d+\.?\d*px;/im

选项2:如果您不能使用起始锚点,因为这可能不是输入文本的实际开始,那么您可以使用带有负后看的单词边界,如下所示:

/(?<!-)\bleft:\s*-?\d+\.?\d*px;/im

现场演示:http://www.rubular.com/r/o1lsRU9mmE

更新:缺少负面预测的Javascript解决方法:

var re=/\b.*?(left:\s*-?\d+\.?\d*px;)/igm;

function matchIt(str) {
   repl = str.replace(re, function($0, $1) {
      return $0 == $1? $0 : '';
   });
   return repl != ""? true : false;
}

console.log(matchIt('margin-left:100px;')); // false
console.log(matchIt('left:100px;')); // true

现场演示:http://ideone.com/xt1kPH

答案 1 :(得分:2)

使用表达式开始锚点

/^\s*?left:\s*?-?\d+\.?\d*px;/im

除了px之外,还可以有其他指标,但我相信你知道的。

答案 2 :(得分:0)

使用字符串的开头(和结尾)anchor,如下所示:

/^\s*?left:\s*?-?\d+\.?\d*px;$/im

答案 3 :(得分:0)

使用Word Boundries

[^(left)]*\b\s*?(left:\s*?-?\d+\.?\d*px;)

所以它会查找任何不是“左”的词,一个单词边界,如上面的链接所述。然后你的(group)返回你想要的东西。

如果您指定此正则表达式所使用的语言,它将帮助我们回答您的问题。否则,请试用www.debuggex.com获取交互式正则表达式调试器!

答案 4 :(得分:0)

尝试使用此正则表达式:

/([^-]left|^left):.*?;/im

如果您的字符串以“left”开头,或者包含“left”但不包含“-left”,则匹配。

如果你不关心你的风格单位,。*?;是一个很好的速记来匹配从:到最近的所有东西;

如果你只需要匹配px而不是%;,pt;,em!important;等等......,请保持你的同一个正则表达式:尽管我认为非贪婪的空间:

\s*?

是不必要的,即你可以使用:

/([^-]left|^left):\s*-?\d+\.?\d*px;/im