我有一堆没有HTML的文字,我试图找到所有String
的{{1}}实例替换<span id="x">String</span>
问题是我每次尝试增加x以获得一堆唯一可识别的跨度而不是相同的跨度。
获取String的所有实例都没有问题,但对于我的生活,我无法使增量工作。我能找到的所有帮助似乎都是针对与此相反的
任何想法,我可以做什么或在哪里寻求帮助?
编辑:
这是针对ID为&#39;结果&#39;只包含文字。
var target = "String";
var X = //the number I was trying to increment
var re = new RegExp(" " + target + " ","g");
document.getElementById('result').innerHTML = document.getElementById('result').innerHTML.replace(re, '<span id="' + X + '">' + target + '</span>');
答案 0 :(得分:4)
我猜你正在使用正则表达式,这很好,但你可以指定一个函数作为replace
的第二个参数并在那里做你的逻辑。
执行此操作的MDN文档位于此处 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter
您可以使用以下内容:
function replacer(orig, target) {
var x = 0;
var re = new RegExp(target, "g");
var ret = orig.replace(re, function (match) {
return "<span id='" + (++x) + "'>" + match + "</span>";
});
return ret;
}
var example = "String Stringasdf String2344 String";
var replaced = replacer(example, "String");
console.log(replaced);
如果您希望计数从++x
开始而不是x++
,则可以将0
更改为1
。
答案 1 :(得分:1)
参考these docs。
您可以将函数传递给String.replace
方法,以允许您在每次调用时递增计数器并使用它来设置您的ID:
var forReplacements = "I do like a String that's a nice long String with Strings in it";
var incrementer = (function() {
var counter = -1;
var fn = function(match) {
counter++;
return "<span id='"+counter+"'>"+match+"</span>";
};
fn.reset = function() {
counter = -1;
}
return fn;
}());
var newString = forReplacements.replace(/String/g, incrementer )
请参阅this fiddle以了解相关信息