JS .replace(str,str):如何在参数1中获取变量但全局工作?

时间:2013-11-05 21:23:48

标签: javascript jquery regex

我有一句话:

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+"_");
}

它不起作用。还有其他技巧吗?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

您也可以使用功能!

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

输出

"Visit5_Our3_Mini4_Lab3_!"

结帐String.prototype.replace docs了解详情

答案 2 :(得分:2)

试试这个:

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

对此进行了描述