在JavaScript中更改字符串中的char

时间:2013-09-03 13:32:12

标签: javascript regex string

我应该使用什么正则表达式与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

5 个答案:

答案 0 :(得分:8)

您可以使用

str = str.replace(/[^.]*/,function(a){ return a.replace(/_/g,'0') })

Reference

答案 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
  }
})