Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中更改字符串中的字符_Javascript_Regex_String - Fatal编程技术网

在JavaScript中更改字符串中的字符

在JavaScript中更改字符串中的字符,javascript,regex,string,Javascript,Regex,String,JavaScript中的“replace()”函数应该使用什么正则表达式来更改0中出现的每个字符“\u1”,但只要找到字符“.”就停止工作 例如: _____323.u_-->00323_ ____032.0_u__;-->0032.0_ 有没有比使用“replace()”更有效的方法 我在研究数字。特别是,它们都可以是浮点的整数,所以我的字符串不能有两个像_32.12.32或_31.34.45那样的点。最多只有一个点 我可以在此添加什么: /_(?=[\d_.])/g 也要找到后跟nothi

JavaScript中的“replace()”函数应该使用什么正则表达式来更改0中出现的每个字符“\u1”,但只要找到字符“.”就停止工作

例如:

_____323.u_-->00323_

____032.0_u__;-->0032.0_

有没有比使用“replace()”更有效的方法

我在研究数字。特别是,它们都可以是浮点的整数,所以我的字符串不能有两个像_32.12.32或_31.34.45那样的点。最多只有一个点

我可以在此添加什么:

/_(?=[\d_.])/g
也要找到后跟nothing的“u2;”吗

示例:0或2323.43_

_(?=[\d_.]|$)
这不起作用:

/_(?=[\d_.$])/g
你可以用

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

您可以在正则表达式中使用先行断言

"__3_23._45_4".replace(/_(?![^.]*$)/g,'0')
结果:
003023.\u 45\u 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
不带replace/regex:

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);
}
var foo=函数(str){
var result=“”,char,i,l;
对于(i=0,l=str.length;i
使用正则表达式:dystroy

本文中各种答案的基准:

除非你有其他不明情况-

查找:

替换:

 0
或者“也要查找uuuuuuuuuuuuuuuuuuuuuuuu0或2323.43 uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


您可以使用
replace()
和reg-ex,您的选择是什么?@dystroy抱歉,在看到您和您的答案之前,我放弃了我的评论。总是有句点吗?@JasonMcCreary我理解“它们都可以是浮点数[…]最多只有一个点”的整数。考虑到_032.0_u是可能的,为什么_032._0不可能?你能解释一下,当第二个参数是函数时,替换是如何工作的吗?@Umur:在这里查找:@Jongware我知道它实际上是如何工作的,我想让它成为一个更好的答案,因为它是一个聪明的答案。@UmurKontacı我添加了引用。全局标志的用法非常好(当不存在时)+1注意:在
\uu 323.\uuu 345.\u
(如果出现这种情况)上失败。对于我来说,它只在最后一个
字符之前停止,忽略所有前面的字符(替换未删除的分数)。即使在Python中也不起作用:
re.sub(r'''.[^.]*$),“0”,“3'.\u 23.\u 45\u 4.\u 5”)
result:
'003023.04504.\u 5'
非正则表达式不需要那么大的回答:
var str=“\uuuuuuuuu323.\uuuu345.\uu”;var newstr=str.substr(0,str.indexOf('.'))。替换(/_/g,'0')+str.substr(str.indexOf('.'))@SmokeyHP在你的评论中有一个正则表达式。@很有趣。。是的,当然-我的意思当然是一个解决方案,它需要从正则表达式上花费大部分精力(我的测试证明性能提高了2倍)@Aegis,这太棒了,感谢大家的参与,但我的意思是反对dystroy提供的正则表达式解决方案。@SmokeyHP我知道,我会把它添加到测试中。我的观点是,如果您想要性能,那么避免使用正则表达式是一个好主意,即使只有一个:pAbout您的str:“最多只有一个点”。
 0
_(?=[\d_.]|$)