我正在使用此正则表达式/\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中使用相同的正则表达式
答案 0 :(得分:3)
选项1:使用开始锚点
/^left:\s*-?\d+\.?\d*px;/im
选项2:如果您不能使用起始锚点,因为这可能不是输入文本的实际开始,那么您可以使用带有负后看的单词边界,如下所示:
/(?<!-)\bleft:\s*-?\d+\.?\d*px;/im
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
答案 1 :(得分:2)
使用表达式开始锚点
/^\s*?left:\s*?-?\d+\.?\d*px;/im
除了px
之外,还可以有其他指标,但我相信你知道的。
答案 2 :(得分:0)
使用字符串的开头(和结尾)anchor,如下所示:
/^\s*?left:\s*?-?\d+\.?\d*px;$/im
答案 3 :(得分:0)
[^(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