0

需要一点帮助,请...

我有一个正则表达式匹配字符串开头的字符,如下所示:

如果我有一组这样的字符串:

雷福克斯
福斯特乔
寻找福雷斯特

正则表达式

/\bfo[^\b]*?\b/gi 

正如预期的那样,这将匹配 Fox、Foster 和 Forrester 中的“FO”:

但是,我面临一个问题,如果字符串集像这样包含在 html 标记中;-

<span class="fontColor1">Ray Fox</span>
<span class="fontColor2">Foster Joe</span>
<span class="fontColor3">Finding Forrester</span>

这也将匹配 fontColor* 中的“FO”。

我对正则表达式相当熟悉,我需要一些帮助来更新查询,以便它只搜索 HTML 标签存在的 HTML 标签之间的值,但如果 HTML 标签不存在,它仍然可以正常工作。

4

2 回答 2

0

关于什么

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

您在哪里有不存在 html 标签的文本?这是没有意义的。

编辑:

此解决方案将不匹配嵌套标签,但在编写问题时,这似乎不是问题。

于 2012-12-17T15:36:11.993 回答
0

您可以使用 html 解析器并提取纯文本,然后进行匹配。

var root;

try {
    root = document.implementation.createHTMLDocument("").body;
}
catch(e) {
    root = document.createElement("body");
}

root.innerHTML = '<span class="fontColor1">Ray Fox</span>\
            <span class="fontColor2">Foster Joe</span>\
            <span class="fontColor3">Finding Forrester</span>';

//If you are using jQuery
var text = $(root).text();

//Proceed as normal with the text variable

如果您不使用 jQuery,则可以用 替换$(root).text()findText(root)其中findText

function findText(root) {
    var ret = "",
        nodes = root.childNodes;
    for (var i = 0; i < nodes.length; ++i) {
        if (nodes[i].nodeType === 3) {
            ret += nodes[i].nodeValue;
        } else if (nodes[i].nodeType === 1) {
            ret += findText(nodes[i]);
        }
    }
    return ret;
}
于 2012-12-17T15:38:50.980 回答