如果有办法将一个简单的字符串替换为另一个简单字符串,我正在尝试完成一个非常简单的任务。
我有一个页面的HTML源代码作为字符串。它包含几个内部锚点,如 < a href =“#about”>,< a href =“#contact”>,< a href =“#top”>,< a href =“#bottom”>,< a href =“#who-we-are”>等等
所有锚都存储在一个数组中(['about','contact'],...),我需要删除每个字符串的出现,如
href="#whatever"
(每当有什么不同的东西时),结果是 &LT a取代;
我用简单的搜索和替换做的是迭代我的数组并替换每个出现的
'href="'+anchorname+'"'
带有空字符串。但在使用string.replace()进行多次尝试后,我仍然没有找到完成此任务的方法。
换句话说(也在评论中发布): 提出问题的一个更简单的方法是:
假设我的字符串包含以下三个字符串
< a href =“#contact”> < a href =“#what”> < a href =“#more”>
如何使用Javascript替换它们(但不是任何具有相同模式的标签)< a> ?
答案 0 :(得分:0)
All of the anchors are stored in an array (['about','contact'],...), and I need to remove every occurance of a string like href="#whatever" (where whatever is each time something different) so that the result is
为此你可以这样做:
var tets_array = $("a[href^='#']"); // select all a tags having href attr starting with #
然后取出数组并根据需要进行修改。
答案 1 :(得分:0)
我不知道我是否理解这个问题,但你可以试试这个:
var index = myArray.indexOf('whatever');
myArray[index] = "whatever2"
答案 2 :(得分:0)
如果我理解正确,那么您可以使用正则表达式替换所有这些。
var tagString = '<a href="#contact"> <a href="#what"> <a href="#more">';
// Find every occurrence which starts with '#' and ends with '"'
var regEx = new RegExp('#.*?"', 'g');
// Replace those occurrences with '"' to remove them
tagString = tagString.replace(regEx, '"');
修改强>
要替换数组中的特定标记,您可以执行以下操作:
var tags = ['<a href="#a">', '<a href="#b">', '<a href="#c">'];
var tagsToReplace = ['a', 'c'];
for (var i = 0, len = tags.length; i < len; i++) {
var matches = tags[i].match(/#.*"/);
if (matches === null) {
continue;
}
var anchor = matches[0].substr(1).replace('"', ''); // Get only the anchor
if (tagsToReplace.indexOf(anchor) !== -1) {
tags[i] = tags[i].replace('#' + anchor, 'replaced');
}
}
答案 3 :(得分:0)
一个具体的陈述如下:
var mystring = '<a href="#thistag"> <a href="#thattag">';
var repstring = mystring;
var myarray = ['thistag', 'theothertag'];
for (var i = 0; i < myarray.length; i++) {
var reptag = myarray[i];
repstring = repstring.replace('a href="#' + reptag + '"', 'a');
}
然后repstring
包含最终字符串。请注意交替的单引号和双引号字符,以确保双引号作为HTML文本的一部分位于通常的位置。显然,您可以更改reptag
(即myarray
的内容)以包含#
字符,此时您可以更改mystring.replace(...)
行以匹配。
答案 4 :(得分:0)
感谢所有建议。我尝试了各种各样的变体,并注意到有些在Firefox中工作但在chrome中没有,这导致我进入这个线程
Why doesn't the javascript replace global flag work in Chrome or IE, and how to I work around it?
这促使我找到了解决方案:
for (var i=0; i < myTags.length ; i++)
{
var find = 'href="#' + myTags[i] + '"';
var regex = new RegExp(find, 'gi');
MyWholeString = MyWholeString.replace(regex, '');
}