我有一个字符串作为变量,我想使用str.replace替换用<span style="..."> + search string + </span>
命中的每个搜索字符串。问题是我在循环中执行此操作,其中搜索字符串更改,有时搜索字符串类似于span或style。当发生这种情况时,结果可能是这样的<span <span style="...">style</span>="...">search string</span>
,这是灾难性的。所以我需要有人帮助我创建正则表达式,选择搜索字符串并排除<span style="...">
和<span>
或者让我知道如何解决这个问题。
以下是我的代码中需要更改的内容:
if ($("#search_criteria option:selected").text() == lng("note_text_txt", "note_text_txt") && $("#search_note").val().trim() != "")
{
var SearchArr = $("#search_note").val().split(" ");
for (i = 0; i < SearchArr.length;i++)
{
data["text"] = data["text"].replace(RegExp(SearchArr[i], 'g'), "<span style='color:red;'>" + SearchArr[i] + "</span>");
}
}
var SearchArr
包含需要在data["text"]
中找到并替换的单词。
答案 0 :(得分:0)
我发布此答案,为您提供正则表达式,以匹配并获取<span>...</span>
之间的内容。
但是,我不确定你到底想做什么。您可以发表一些评论,以帮助我了解您的全部需求,以便我可以更新答案,以提供准确的帖子。
目前,我留下了正则表达式和下面的演示。
<span.*?>(.*?)<\/span>
您可以在此处看到 working example
另一方面,您可以使用其他选项来替换内容。
(<span.*?>)(.*?)(<\/span>)
这里有 working demo
希望能提供帮助。
答案 1 :(得分:0)
如果您已经在使用JQuery,则可以使用库的选择器替换实际的标记内容。
我会这样想:
$(data['text']).find('*:contains(SearchArr[i])').text(function(index, text) {
return text.replace(SearchArr[i], '<span>');
});
以此作为一个想法和例子。在实际使用中,您应该更好地指定上面选择的元素*。 'all'选择器与:contains相结合会对性能产生重大影响。
修改强>
它也适用于您的纯文本。如果为JQuery对象的构造函数提供有效的HTML,则会创建JQuery对象中打包的DOM元素,并且可以以从文档中选择的任何一个方式对其进行操作。请看下面的示例:http://jsfiddle.net/Vk7N3/1/