我应该使用什么正则表达式与JavaScript中的'replace()'函数一起更改0中每次出现的char'_',但只要找到char',就停止工作。'?
示例:
_____ 323 .____ ---> 00323 ._
____ 032.0 ____ - > 0032.0 _
有没有比使用'replace()'更有效的方法?
我正在处理数字。特别是,它们可以是浮动的整数,因此我的字符串永远不会有像__32.12.32或__31.34.45中的两个点。最多只有一个点。
我可以在此添加什么:
/_(?=[\d_.])/g
还发现'_'后面没有任何东西?
示例:0__或2323.43 _
这不起作用:
/_(?=[\d_.$])/g
答案 0 :(得分:8)
答案 1 :(得分:1)
没有替换/正则表达式:
var foo = function (str) {
var result = "", char, i, l;
for (i = 0, l = str.length; i < l; i++) {
char = str[i];
if (char == '.') {
break;
} else if (char == '_') {
result += '0';
} else {
result += str[i];
}
char = str[i];
}
return result + str.slice(i);
}
正则表达式:破坏
此帖中各种答案的基准: http://jsperf.com/regex-vs-no-regex-replace
答案 2 :(得分:1)
除非你有其他一些模糊的情况 -
查找
_(?=[\d_.])
取代:
0
或“要查找_后面没有任何内容,例如:0__或2323.43 _”
_(?=[\d_.]|$)
答案 3 :(得分:0)
你可以在regex中使用lookahead断言......
"__3_23._45_4".replace(/_(?![^.]*$)/g,'0')
结果:003023._45_4
说明:
/ # start regex
_ # match `_`
(?! # negative lookahead assertion
[^.]*$ # zero or more (`*`) not dots (`[^.]`) followed by the end of the string
) # end negative lookahead assertion
/g # end regex with global flag set
答案 4 :(得分:0)
var str = "___345_345.4w3__w45.234__34_";
var dot = false;
str.replace(/[._]/g, function(a){
if(a=='.' || dot){
dot = true;
return a
} else {
return 0
}
})