我已经在这里找到了一些答案,我无法找到解决问题的方法:
我有这个正则表达式,它匹配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。在此先感谢:)。
答案 0 :(得分:0)
虽然我不推荐这个,但我会做类似下面的事情
(class)(?:(?=.*<span\b[^>]*>))|(?:(?<=<\/span>).*)(class)
你可以在这里看到这个
您可以从群组中捕获匹配项,并根据需要使用它们。如果可以,请使用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);
英文:针对您的标记表达或进行非捕获测试,捕获任何字符。全局执行以获取整个字符串。结果是字符串中每个字符的捕获组,除了标记。正如所指出的那样,这很难看 - 可能导致大量的捕获组 - 但完成工作。
如果您需要将其发送并在一次通话中检索结果,我必须同意以前的贡献者 - 这是不可能做到的!