请一点帮助......
我有一个正则表达式,匹配字符串开头的字符,如下所示:
如果我有一组这样的字符串:
Ray Fox Foster Joe Finding Forrester
REGEX
/\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标记不存在仍然可以正常工作。
答案 0 :(得分:0)
怎么样?
<.*?span.*?>(.*?)<\s?\/.*?span.*?>
你在哪里有html标签不存在的文字?这毫无意义。
编辑:
此解决方案与嵌套标记不匹配,但在编写问题时,这似乎不是问题。
答案 1 :(得分: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;
}