Javascript 使用regexp获取不在特定html标记中的字符串

Javascript 使用regexp获取不在特定html标记中的字符串,javascript,regex,Javascript,Regex,我有这根绳子 @test <span class="mention">@test</span> @test2 <span class="mention">@test</span>` @test@test@test2@test` 我想在Javascript中匹配所有以@符号开头的单词 我已经创建了用于匹配span对象的RegExp /<span class="mention"((.*)data-mention="\d+")?>@\w+

我有这根绳子

@test <span class="mention">@test</span> @test2 <span class="mention">@test</span>`
@test@test@test2@test`
我想在Javascript中匹配所有以@符号开头的单词

我已经创建了用于匹配span对象的RegExp

/<span class="mention"((.*)data-mention="\d+")?>@\w+<\/span>/g
/@\w+/g

但我就是不知道如何得到不在跨度元素内的元素

不要使用正则表达式。它是HTML,因此请使用DOM操纵方法:

var s = '@test <span class="mention">@test</span> @test2 <span class="mention">@test</span>';

var e = document.createElement("div");
e.innerHTML = s;
var spans = e.getElementsByTagName("span");
while (spans.length > 0) {
    e.removeChild(spans[0]);
}
console.log(e.innerHTML);
var s='@test@test@test2@test';
var e=document.createElement(“div”);
e、 innerHTML=s;
var span=e.getElementsByTagName(“span”);
while(span.length>0){
e、 removeChild(跨度[0]);
}
log(e.innerHTML);


这将给您留下
@test@test2
,然后您可以将其拆分或与正则表达式匹配。

下面是一个尝试提取所需

Regex

/(@\w+\b)(?![^>]*?<\/span>)/g
/(@\w+\b)(?![^>]*?)/g
测试字符串

@test <span class="mention">@test</span> @test2 <span class="mention">@test</span>`
@test@test@test2@test`
结果

  • 比赛1
    • [0-5]
      @测试
  • 比赛2
    • [41-47]
      @test2
演示

试一试


请注意,这不是一个万无一失的解决方案,它只是基于您的测试字符串。

为什么只使用正则表达式?HTML不是一种正则语言,它不能被单个正则表达式可靠地解析。您可能会将正则表达式缩短为
/.*./g
@RobG我使用的库仅支持正则表达式来实现这些功能。@MichaelH这个怎么样?@pushpraj谢谢!你能再帮我一个吗?我正在尝试去除所有html标记,除了那些是任何单词的标记,有什么建议吗?你可以尝试
/(].*)/g
()用文本替换每个span,或者
/()/g
()如果你只想用指定的class属性替换span。如果span有class,我实际上不想替换它。。但是你想删除除此之外的所有html标记吗