正则表达式,用于选择字符串的一部分并排除字符串的另一部分

时间:2014-07-30 14:27:53

标签: javascript html regex string replace

我有一个字符串作为变量,我想使用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"]中找到并替换的单词。

2 个答案:

答案 0 :(得分:0)

我发布此答案,为您提供正则表达式,以匹配并获取<span>...</span>之间的内容。

但是,我不确定你到底想做什么。您可以发表一些评论,以帮助我了解您的全部需求,以便我可以更新答案,以提供准确的帖子。

目前,我留下了正则表达式和下面的演示。

匹配并获取内容正则表达式

<span.*?>(.*?)<\/span>

您可以在此处看到 working example

enter image description here

另一方面,您可以使用其他选项来替换内容。

替换内容正则表达式

(<span.*?>)(.*?)(<\/span>)

这里有 working demo

enter image description here

希望能提供帮助。

答案 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/