2012-12-17 93 views
0

需要请有一点帮助......匹配的字符,忽略字符串中的HTML标签

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

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

 
Ray Fox 
Foster Joe 
Finding Forrester 

正则表达式

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

这将如预期相符“FO”的福克斯,福斯特和Forrester:

不过,我面临着在那里,如果一组琴弦被包装在HTML标签,像这样的问题; -

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

这将在FONTCOLOR匹配“为” *为好。

我相当绿色正则表达式,我需要一点点帮助更新查询,以便它只有在HTML标签存在搜索HTML标记之间的值,但仍正常工作,如果不存在的HTML标签。

+7

你有没有考虑(http://stackoverflow.com/ a/1732454) –

+0

你想达到什么目的?你为什么在这些字符串上使用正则表达式。你想隐藏跨度吗? – Bruno

回答

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,您可以用findText(root),其中findText更换$(root).text():?使用HTML解析器代替]

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; 
} 
+0

谢谢,在最后我花了保证,我只是路过字符串(不包含HTML标签)到相关功能的选项,我想我终于得到它,现在,与使用正则表达式的问题与HTML标签的工作。 – ClaraU

0

什么

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

而且,你在哪里有文字哪里不存在html标签?这是没有意义的。

编辑:

该解决方案将不匹配嵌套的标签,但因为这个问题被写,这似乎并不成为一个问题。

+0

这中间在因为一次匹配多个开闭标签对(。*?)。这说明了试图用正则表达式处理HTML的困难。如上所述,只需使用HTML解析器并在文本内容上使用正则表达式即可。 – alexp

+0

你是对的。我已经看到了一个正则表达式。我会看看我能否找到它。 –

+0

不,我发现我一直在寻找的正则表达式,而它并没有解决嵌套标签的问题。但是,从这个问题来看,这似乎不成问题。 –