Jquery:查找字符串中的所有实例模式,提示用户替换模式的所有实例,然后执行替换

时间:2012-06-18 18:30:18

标签: javascript jquery string

所以基本上我将有一个字符串,它将有n个与模式匹配的实例。具体来说,该模式将是这种形式的任何内容<%=(text)%>。

我想通过我的字符串来完善与该模式匹配的每个唯一实例。例如,如果我的字符串看起来像这样。

<div>Stuff </div>
<%= url %>
<%= url %>
<%= name %>
<div>Stuff </div>
<%= name %>
<%= url %>
<%= name %>

我想找到独特的模式&lt;%= url%&gt;和&lt;%= name%&gt;。然后我想提示我的应用程序的用户提供这些匹配的替换字符串。即我想要一个坚持&lt;%= url%&gt;的回复替换为stackoverflow.com和&lt;%= name%&gt;被Peter取代。

然后我想循环遍历字符串并进行这些替换。使用Jquery和纯Javascript的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

这是一种方法:

var string = '<div>Stuff </div><%= url %><%= url %><%= name %><div>Stuff </div><%= name %><%= url %><%= name %>';

var n = document.getElementById('a');

function replaceWithPrompt(haystack) {
    if (!haystack) {
        return false;
    }
    else {
        var nStr = haystack.replace(/(?:<\%\=\s+)(\b[\w]+\b)(?=\s+\%>)/gi, function(a,b) {
            var replaceWith = prompt('Replace "' + b + '" with: ', b) || b;
            return replaceWith;
        });
    }
    console.log(nStr);

}

n.onclick = function(){
    replaceWithPrompt(string);
};

JS Fiddle demo

以上内容基于带有以下标记的页面:

 <button id="a">Replace the strings</button>​

参考文献:

答案 1 :(得分:0)

试试这个:

// the original string
var string = "<div>Stuff </div><%= url %><%= url %><%= name %><div>Stuff </div><%= name %><%= url %><%= name %>​";

// array of patterns to substitute
var patterns = ["<%= url %>","<%= name %>"];

// ask for all the replacements
var result = replacePatterns(string, patterns);

// print out the result
console.log(result);

function replacePatterns(str, pat)
{
    for (var i in pat)
    {
        var p = pat[i];
        var regex = new RegExp(p, "g");
        var r = prompt("Replacement for "+p);
        str = str.replace(regex,r);
    }
    return str;
}