Javascript 替换文本区域中多次出现的字符串(url)

Javascript 替换文本区域中多次出现的字符串(url),javascript,php,jquery,html,Javascript,Php,Jquery,Html,也许我不能做到这一点,因为我对正则表达式了解不多 我有一系列独特的链接唯一链接 每当这些链接出现在HTML代码“我有我的文本区域”中时,我希望它们被替换为{{tracking_link_N}},其中N代表键。现在我有一个当按下按钮时调用的函数 function detect_links() { var links = []; var uniqueLinks = []; var html = $("textarea[name=html]").val(); // Getting all the l

也许我不能做到这一点,因为我对正则表达式了解不多

我有一系列独特的链接唯一链接

每当这些链接出现在HTML代码“我有我的文本区域”中时,我希望它们被替换为{{tracking_link_N}},其中N代表。现在我有一个当按下按钮时调用的函数

function detect_links() {
var links = [];
var uniqueLinks = [];
var html = $("textarea[name=html]").val();

// Getting all the links in the textarea to replace them
$(html).find('a').each(function() {
    links.push($(this).attr('href'));
})

// Creating an array of unique links uniqueLinks
$.each(links, function(i, el) {
    if ($.inArray(el, uniqueLinks) === -1) uniqueLinks.push(el);
});

$.each(uniqueLinks, function(key, value) {
        var newHTML = $("textarea[name=html]").val().replace(value, '{{tracking_link' + key + '}}');
        $("textarea[name=html]").val(newHTML);
});
}
我的文本区是:

<textarea name="html" class="form-control" rows="15"></textarea>

到目前为止,这段代码只替换了textarea中第一次出现的URL。但是,在某些情况下,同一URL在文本区域中多次出现。例如

<a href="http://google.co.uk">Google</a>
<a href="http://google.com">Google 2</a>
<a href="http://google.co.uk">Google 3</a>

我的代码返回

<a href="http://google.co.uk">{{tracking_link0}}</a>
<a href="http://google.com">{{tracking_link1}}</a>
<a href="http://google.co.uk">Google 3</a>

它应该返回

<a href="http://google.co.uk">{{tracking_link0}}</a>
<a href="http://google.com">{{tracking_link1}}</a>
<a href="http://google.co.uk">{{tracking_link0}}</a>

我在阅读其他讨论时尝试的是这样更改
replace()
函数

replace(/value/g,“{{tracking_link'+key+'}}”)

但我没有得到任何明显的结果

我的URL也包含参数,例如:

http://tracking.testapp.com/affil?offer=105&id=1152

感谢您为解决此问题提供的帮助


注:解释您对问题的否决票使其更可信

您的问题是因为
replace()
方法仅在您提供字符串值时对第一个找到的实例有效。相反,如果您给它一个带有全局标志集(
g
)的正则表达式,那么它将查找并替换所提供值的所有实例

还要注意,通过将函数传递给
val()
,可以使代码更加简洁。试试这个:

var uniqueLinks=['http://google.co.uk', 'http://google.com'];
$.each(唯一链接、函数(键、值){
var re=新的RegExp(值'gi');
$(“textarea[name=html]”).val(函数(i,v){
返回v.replace(re'{{tracking_link'+key+'}}');
});
});
textarea{
宽度:100%;
高度:80px;
}

您的问题是因为
replace()
方法仅在您为第一个找到的实例提供字符串值时有效。相反,如果您给它一个带有全局标志集(
g
)的正则表达式,那么它将查找并替换所提供值的所有实例

还要注意,通过将函数传递给
val()
,可以使代码更加简洁。试试这个:

var uniqueLinks=['http://google.co.uk', 'http://google.com'];
$.each(唯一链接、函数(键、值){
var re=新的RegExp(值'gi');
$(“textarea[name=html]”).val(函数(i,v){
返回v.replace(re'{{tracking_link'+key+'}}');
});
});
textarea{
宽度:100%;
高度:80px;
}

/value/g
意味着全局搜索准确的字符串
“value”
。您希望它全局搜索
变量的值。为此,必须使用
RegExp()
,以便JavaScript解析
value
以表示变量
value
的值,而不是字符串
“value”

将其添加到JavaScript代码中的某个位置(摘自):


/value/g
表示全局搜索准确的字符串
“value”
。您希望它全局搜索
变量的值。为此,必须使用
RegExp()
,以便JavaScript解析
value
以表示变量
value
的值,而不是字符串
“value”

将其添加到JavaScript代码中的某个位置(摘自):

var uniqueLinks=['http://google.co.uk', 'http://google.com'],
textArea=$(“textArea[name=html]”),
text=textArea.text();
$.each(唯一链接、函数(键、值){
var re=new RegExp(““+value+”>([^
var uniqueLinks=['http://google.co.uk', 'http://google.com'],
textArea=$(“textArea[name=html]”),
text=textArea.text();
$.each(唯一链接、函数(键、值){

var re=new RegExp(““+value+””>([^由于某些原因,它无法工作,但我在控制台中没有收到任何错误。我的代码片段位于一个名为
detect\u links()的简单函数中
在单击按钮时运行。这可能是原因吗?我的URL也可能包含参数,如
http://tracking.testapp.com/affil?offer=105&id=1152
@wiredmark您能更具体地说明它是如何工作的吗?结果是什么?您能在您的帖子中添加更多相关的代码,也许是一个工作示例吗?@wiredmark the问题是
RegExp()
仍然解析变量
value
的某些部分,就好像它们是特殊字符一样。我更新了我的答案。它现在应该可以工作了。@wiredmark要解决这个问题,请使
value
更加具体。将
href=“
添加到它的开头并
结束。然后对要替换的内容执行相同的操作(从
'{tracking\u link'+key+}}}'
'href=“{tracking\u link'+key+}}'
)。作为一个整体,该行应该变成
var newHTML=$(“textarea[name=html]”)。val()。替换(new RegExp(escapeRegExp('href=“+value+”),“g”),'href=”{{tracking_link'+key+'}}}';
。由于某些原因,它无法工作,但我在控制台中没有收到错误。我的代码片段位于一个名为
detect_links()的简单函数中
在单击按钮时运行。这可能是原因吗?我的URL也可能包含参数,如
http://tracking.testapp.com/affil?offer=105&id=1152
@wiredmark您能更具体地说明它是如何工作的吗?结果是什么?您能在您的帖子中添加更多相关的代码,也许是一个工作示例吗?@wiredmark the问题是
RegExp()
仍然解析变量
value
的某些部分,就好像它们是特殊字符一样。我更新了我的答案。它现在应该可以工作了。@wiredmark要解决这个问题,请使
value
更详细
var newHTML = $("textarea[name=html]").val().replace(new RegExp(escapeRegExp(value), "g"), '{{tracking_link' + key + '}}');
escapeRegExp = function(text) {
  return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};