Javascript 替换文本区域中多次出现的字符串(url)
也许我不能做到这一点,因为我对正则表达式了解不多 我有一系列独特的链接唯一链接 每当这些链接出现在HTML代码“我有我的文本区域”中时,我希望它们被替换为{{tracking_link_N}},其中N代表键。现在我有一个当按下按钮时调用的函数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
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, "\\$&");
};