使用Javascript RegExp将每个匹配项替换为递增数字

9
我想用递增的数字替换字符串中的空行。
例如: 替换
字符串:
"My first line

My second line

My third line"

使用

"
1

My first line

2

My second line

3

My third line"

我可以使用匹配和替换来处理这些行。
var newstring = TestVar.replace (/(^|\n\n)/g, "\nhello\n");

然而,我正在努力添加一个功能,将一个迭代数字添加到每个元素中。你能帮忙吗?谢谢!Gids

请在每行代码开头使用四个空格进行缩进。 - Gumbo
谢谢提醒,我会确保以后做到这一点。 - Gids
3个回答

11

是的,你可以在 JavaScript 中做到这一点。你只需要将一个函数作为第二个参数传递给 replace 函数。

var i = 0;
var newstring = TestVar.replace(/(^|\n\n)/g, function() { return '\n' + (++i) + '\n'; });

这个函数基于传入的参数可以决定你想要替换的值,但是我们在这个任务中不需要任何参数。

然而,了解它们还是很好的,MDC有一个关于这个主题的很棒的文档


非常感谢您的超快速和有帮助的回复。 - Gids
我原以为这在IE 6中不起作用,但事实上它确实可以。 结果是,IE 5是最后一个不支持将函数作为String.replace的第二个参数的版本。 - Tim Down

2
这里有一个不使用正则表达式的版本。您可以使用Stringsplit()方法,但坦率地说,我会使用更简洁的正则表达式版本。
var testVar = "My first line\n\nMy second line\n\nMy third line";
var lines = testVar.split("\n\n"), newStringParts = [];
for (var i = 0, len = lines.length; i < len; ++i) {
    newStringParts.push(i + 1);
    newStringParts.push(lines[i]);
}
alert( newStringParts.join("\n") );

1
查看非正则表达式的替代方案总是一个好主意。 - Andy E

0

为了在HTML中将图像路径替换为仅名称,我做了类似于这样的事情

html='hello <img src="../../../../yahoo/images/icons/common/image_one.png">a<img \
src="add.png"> xyz <table><tbody><tr><td>He<img src="document_add.png">loo<img\
src="document_add.png"></td></tr></tbody></table><img src="CD_delete.png"><img src="check.png">'


html.replace(/src="(.*?)"/ig, function($1){return 'src="'+$1.match(/([^\/\\]+)\.(\w+)/)[0]+'"'  });

输出将会是

   "hello <img src="image_one.png">a<img src="src="add.png"> xyz <table><tbody><tr><td>He<img src="src="document_add.png">loo<img src="src="document_add.png"></td></tr></tbody></table><img src="src="CD_delete.png"><img src="src="check.png">"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接