1

我想匹配表示相对(任意)单位的字符串部分。例如“+=50foo”、“-=300bar”、“-3%”。我大部分时间都在那儿,但是对于某些输入,我遇到了奇怪的错误,而且我没有看到模式或修复。

var myRegEx = new RegExp( "^([+-])=(\\d+\.?\\d*)(\\D+)$", "i" );

console.log(myRegEx.exec("-=5%")); // good
console.log(myRegEx.exec("+=3.14wigs")); // good
console.log(myRegEx.exec("+=50px")); // broken: "50p", "x"
console.log(myRegEx.exec("+=49999999px")); // broken: "49999999p", "x"
console.log(myRegEx.exec("+=100em")); // broken: "100e" , "m"

http://jsfiddle.net/sNd9W/

4

3 回答 3

1

这应该有效(注意\点附近的附加信息):

var myRegEx = new RegExp( "^([+-])=(\\d+\\.?\\d*)(\\D+)$", "i" );
于 2013-08-13T22:51:25.927 回答
1

这是一个更清洁的解决方案:

var myRegEx = /^([+-])=(\d+\.?\d*)(\D+)$/i;

您的解决方案没有正确地双重转义句点(您有 \.,需要 \\.),因为双引号字符串会自行转义。为了简单起见,我根本没有使用字符串。

实例:http: //jsfiddle.net/sNd9W/2/

于 2013-08-13T22:56:35.730 回答
-1
var myRegEx = /^([+-])=([\d.]+)(.+)$/i;

http://jsfiddle.net/sNd9W/3/

第一个捕获组是 +/- 第二个是数字和十进制组最后剩下的。

于 2013-08-13T22:56:39.150 回答