用regexp替换返回undefined

时间:2014-03-27 10:21:01

标签: javascript regex

我在正则表达方面并没有那么糟糕,但我有一个小问题,也许你们其中一个人可以回答这个简单的问题。

我这样做:

var myString = "10px";
var myRegexp = new RegExp("(\\d*\\.?\\d*){1}(em|ex|grad|ch|deg|ms|rad|rem|s|turn|vh|vw|vmin|vmax|px|cm|in|pt|pc|%)?", "gi");

myString.replace(myRegexp, function( match, number, type ){
    console.log(match, number, type);
});

替换控制台记录两次,第一次是:"10px", "10", "px"而且我不知道为什么会有第二次,它返回给我:,,undefined(两个第一个值是不为null或空字符串,它们只返回任何内容,绝对是空的。)

我的问题,为什么替换尝试替换什么都没有?怎么避免呢?

2 个答案:

答案 0 :(得分:2)

而不是:

 (\\d*\\.?\\d*){1}

使用开始锚点

^(\\d*\\.?\\d*)

因为你的正则表达式都是可选的,并且也匹配空字符串。

答案 1 :(得分:1)

我认为这是因为你的表达式具有可选的所有内容,所以你也匹配零长度字符串(javascript的问题)。如果我理解你想做什么,我不认为这个数字必须是可选的,所以你可以试试:

(\d*\.?\d+)(em|ex|grad|ch|deg|ms|rad|rem|s|turn|vh|vw|vmin|vmax|px|cm|in|pt|pc|%)?
相关问题