1

我有这样一句话:

Visit5Our3Mini4Lab3!

我想在每个数字后添加一个分隔符“_”。我的数字总是 <6 ,所以我只有一位数字。

我找到了一种将其从 0 循环到 5 的方法,因此在第一轮我替换所有“0”,然后替换所有“1”,等等。不幸的是,这仅替换了我的数字的第一次出现(不是全局的)。

for (i=0; i<6; i++) { str = str.replace(i, i+"_"); // this work once only

有没有办法.replace()与变量一起使用i

for (i = 0; i < 6; i++) { str = str.replace(/i/g, i+"_"); // replace all characters "i", NOT what I want.

如何在 .replace() 的第一个参数中获取变量,但让它在全局范围内工作。

http://jsfiddle.net/qyWga/3/

http://www.w3schools.com/jsref/jsref_replace.asp


编辑:我也试过:

for (i = 0; i < 6; i++) { 
    var trick = "/"+i+"/g";
    trick = trick.toString(); 
    str = str.replace(trick, i+"_");
}

它不起作用。还有什么技巧吗?

4

3 回答 3

4

g使用带有(全局)标志的正则表达式:

str = str.replace(/([0-6])/g, "$1_");

这使用括号来捕获匹配项,匹配项由0- 6(包括06)中的任意数字组成,g搜索整个字符串中的每个匹配项。代表第$1一个捕获的匹配,并将其与后面的一起放入替换_中。

于 2013-11-05T21:26:58.177 回答
3

也可以使用函数!

"Visit5Our3Mini4Lab3!".replace(/\d/g, function(match) { return match + "_"; });

输出

"Visit5_Our3_Mini4_Lab3_!"

查看String.prototype.replace 文档以获取更多信息

于 2013-11-05T21:29:14.957 回答
2

尝试这个:

str = str.replace(/\d/g, "$&_");

这在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace中有描述

于 2013-11-05T21:30:42.400 回答