3

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

5 回答 5

8

你可以使用

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

参考

于 2013-09-03T13:35:52.247 回答
1

除非你有其他一些不为人知的情况——

寻找:

 _(?=[\d_.])

代替:

 0

或“也查找 _ 后无任何内容,例如:0__ 或 2323.43_”

_(?=[\d_.]|$)
于 2013-09-03T15:48:23.803 回答
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);
}

使用正则表达式:dystroy

这篇文章中各种答案的基准:http: //jsperf.com/regex-vs-no-regex-replace

于 2013-09-03T13:44:31.867 回答
0

您可以在正则表达式中使用前瞻断言...

"__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
于 2013-09-03T13:42:09.987 回答
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
  }
})
于 2013-09-03T14:10:22.837 回答