使用正则表达式在动态设置的特定位置替换字符串

时间:2014-08-14 15:27:22

标签: javascript regex

我想使用正则表达式替换匹配模式字符串中的字符串。

这是我的字符串:

"this is just a simple text. this is just a simple text. this is just a simple text. this is just a simple text. How are you man today. I Have been working on this."

现在,我有一种情况,我希望将"just a simple"替换为"hello",而替换为第三次出现串。所以任何人都可以指导我完成这一点,我将非常有帮助。 但扭曲来了。上面的字符串是动态的。用户可以修改或更改文本。

那么,如果用户在开始时或在第三次出现字符串之前添加"this is just a simple text"一次或多次更改我的字符串替换位置,我该如何检查?

对不起,如果我不清楚;但任何指导或帮助或任何其他方法都会有所帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

(?:.*?(just a simple)){3}

<强> Working demo

enter image description here

答案 1 :(得分:1)

您可以将replace与动态构建的正则表达式和回调一起用于计算搜索模式的出现次数:

var s = "this is just a simple text. this is just a simple text. this is just a simple text. this is just a simple text. How are you man today. I Have been working on this.",
    pattern = "just a simple",
    escapedPattern = pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'),
    i=0;
s = s.replace(new RegExp(escapedPattern,'g'), function(t){ return ++i===3 ? "hello" : t });

请注意,我使用this related QA来转义模式中的任何“特殊”字符。

答案 2 :(得分:0)

尝试

$(selector)
.data("r", ["simple text", 3, "hello"])
.text(function (i, o) {
    var r = $(this).data("r");
    return o.replace(new RegExp(r[0], "g"), function (m) {
        ++i;
        return (i === r[1]) ? r[2] : m
    })
}).data("r", []);

jsfiddle http://jsfiddle.net/guest271314/2fm91qox/

Find and replace nth occurrence of [bracketed] expression in string

Replacing the nth instance of a regex match in Javascript

JavaScript: how can I replace only Nth match in the string?