javascript正则表达式模式问题

时间:2011-07-03 13:39:22

标签: 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');

不会改变2-> 6。 实际上我在这里失踪了什么。有什么帮助吗?

4 个答案:

答案 0 :(得分:3)

我认为正则表达式对于该问题来说是一个糟糕的解决方案。我宁愿做这样的事情:

var str = '0|31|2|03|4|2007';
var segments = str.split("|");
segments[1] = "35";
segments[2] = "123";

无法想出用正则表达式解决这个问题的好方法。

答案 1 :(得分:2)

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

其次,您不要将量词放在字符集中。

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

答案 2 :(得分:2)

[^ \ |]表示除“|”之外的任何内容,因此在您的情况下,它只匹配一个数字。因此它只会匹配2位或更多位数的任何内容。

其次你应该把{2}放在[] -brackets

之外

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

答案 3 :(得分:2)

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

var re = /^((?:\d+\|){1})\d+/;
return text.replace(re, '$15');

如果您要替换第三个|后面的数字,只需将正则表达式的{1}部分更改为{3}

这是一个通用函数,它将用指定的新数字替换任何给定的数字槽(从零开始的索引):

function replaceNthNumber(text, n, newnum) {
    var re = new RegExp("^((?:\\d+\\|){"+ n +'})\\d+');
    return text.replace(re, '$1'+ newnum);
}