Javascript java脚本正则表达式模式问题

Javascript java脚本正则表达式模式问题,javascript,regex,replace,Javascript,Regex,Replace,我的问题从喜欢开始- var str='0|31|2|03|.....|4|2007' str=str.replace(/[^|]\d*[^|]/,'5'); 因此,输出变为:“0 |5| 2 | 03 | 4 | 2007”,因此它将替换31->5 但当我像这样更改代码时,这不适用于替换其他段: str=str.replace(/[^|]{2}\d*[^|]/,'6'); var str = '0|31|2|03|4|2007'; var segments = str.split("|")

我的问题从喜欢开始-

var str='0|31|2|03|.....|4|2007'
str=str.replace(/[^|]\d*[^|]/,'5');
因此,输出变为:“0 |5| 2 | 03 | 4 | 2007”,因此它将替换31->5

但当我像这样更改代码时,这不适用于替换其他段:

str=str.replace(/[^|]{2}\d*[^|]/,'6');
var str = '0|31|2|03|4|2007';
var segments = str.split("|");
segments[1] = "35";
segments[2] = "123";
不改变2->6。
这里我缺少什么。有什么帮助吗?

我认为正则表达式是解决这个问题的好方法。我宁愿这样做:

str=str.replace(/[^|]{2}\d*[^|]/,'6');
var str = '0|31|2|03|4|2007';
var segments = str.split("|");
segments[1] = "35";
segments[2] = "123";

想不出用regexp解决这个问题的好方法。

首先,您不必在字符集中转义
|
,因为它在字符集中没有任何特殊意义

第二,你不把量词放在字符集中


最后,要创建全局匹配表达式,必须使用
g
标志。

[^\|]表示除“|”以外的任何内容,因此在您的示例中,它只匹配一个数字。因此,它将只匹配任何具有2个或更多数字的内容

其次,应该将{2}放在[]-括号之外


我不确定您想在这里实现什么。

这里有一个特定的正则表达式解决方案,它将第一个
管道符号后面的数字替换为数字
5

var re=/^((?:\d+\\124;){1})\d+/;
返回文本。替换(关于“$15”);
如果要替换第三个
|
后面的数字,只需将正则表达式的
{1}
部分更改为
{3}

下面是一个通用函数,它将用指定的新编号替换任何给定编号的插槽(基于零的索引):

函数replaceNthNumber(text,n,newnum){
var re=new RegExp(“^((?:\\d+\\\\\\){”+n+'})\\d+');
返回文本。替换(重“$1”+newnum);
}

str=str.replace(/(^ |[|])\d+(?=[|]|$)/g,'$1'+5)谢谢katspaugh,但您的解决方案将所有段都设置为5。我实际上想要的是将每个段更改为单独的输入。我知道\g,但我想要的是将特定的索引/段更改为每个单独的输入。那么您有什么解决方案吗?您可以使用函数替换器来使用
替换
。看,我不小心点击了向下投票按钮。在编辑帖子之前,我无法撤消它。请编辑它,我将删除否决票。很抱歉