正则表达式匹配与给定正则表达式不匹配的字符串

时间:2014-11-28 01:57:52

标签: javascript regex regex-negation

我已经在这里找到了一些答案,我无法找到解决问题的方法:

我有这个正则表达式,它匹配HTML span标记内的每个内容,包括内容:

<span\b[^>]*>(.*?)</span>

我希望找到一种在所有文本中进行搜索的方法,除了与该正则表达式匹配的内容。 例如,如果我的文字是:

var text = "...for there is a class of <span class="highlight">guinea</span> pigs which..."

...然后正则表达式匹配:

<span class="highlight">guinea</span>

我希望能够创建一个正则表达式,如果我搜索&#34; class&#34;,regexp将匹配"...for there is a class of..." 并且不会在标签内匹配,例如

"... class="highlight"..."

要匹配的单词(&#34; class&#34;)可能位于文本中的任何位置。我试过了

(?!<span\b[^>]*>(.*?)</span>)class

但它也会继续在标签内搜索。 我想找到一个只使用regexp的解决方案,而不是处理DOM和JQuery。在此先感谢:)。

2 个答案:

答案 0 :(得分:0)

虽然我不推荐这个,但我会做类似下面的事情

(class)(?:(?=.*<span\b[^>]*>))|(?:(?<=<\/span>).*)(class)

你可以在这里看到这个

Rubular Link for this regex

您可以从群组中捕获匹配项,并根据需要使用它们。如果可以,请使用HTML解析器,然后从文本元素中查找匹配项。

答案 1 :(得分:0)

它不漂亮,但如果我找对你,这应该做你想做的事。它使用单个RegEx完成,但js不能(据我所知)提取结果而不将结果连接到循环中。

RegEx:/(?:<span\b[^>]*>.*?<\/span>)|(.)/g

示例js代码:

var str = '...for there is a class of <span class="highlight">guinea</span> pigs which...',
    pattern = /(?:<span\b[^>]*>.*?<\/span>)|(.)/g,
    match,
    res = '';


match = pattern.exec(str)
while( match != null )
{
    res += match[1];
    match = pattern.exec(str)
}

document.writeln('Result:' + res);

英文:针对您的标记表达进行非捕获测试,捕获任何字符。全局执行以获取整个字符串。结果是字符串中每个字符的捕获组,除了标记。正如所指出的那样,这很难看 - 可能导致大量的捕获组 - 但完成工作。

如果您需要将其发送并在一次通话中检索结果,我必须同意以前的贡献者 - 这是不可能做到的!