1

我有一堆没有 HTML 的文本,我试图找到所有替换所有实例的问题String。问题<span id="x">String</span>
是我每次都试图增加 x 以获得一堆唯一可识别的跨度,而不是相同的跨度。
获取 String 的所有实例都没有问题,但在我的一生中,我无法让增量工作。我能找到的所有帮助似乎都与此相反。
有什么想法我能做什么或在哪里寻求帮助?

编辑:
这是针对 ID 为“结果”且仅包含文本的 div。

    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>');
4

2 回答 2

4

我猜你正在使用正则表达式,这很好,但你可以指定一个函数作为第二个参数replace并在那里执行你的逻辑。

执行此操作的 MDN 文档在这里 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter

你可以使用这样的东西:

http://jsfiddle.net/gjrCN/2/

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++01

于 2012-11-29T01:19:49.997 回答
1

参考这些文档

您可以将一个函数传递给该方法,该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 )

这个小提琴看看它在行动

于 2012-11-29T01:20:40.047 回答