我在正则表达方面并没有那么糟糕,但我有一个小问题,也许你们其中一个人可以回答这个简单的问题。
我这样做:
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或空字符串,它们只返回任何内容,绝对是空的。)
我的问题,为什么替换尝试替换什么都没有?怎么避免呢?
答案 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|%)?