You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式选中两个完整span标签并忽略中间文本?

嘿,我来帮你解决这个正则匹配的问题!

你之前用的^(\<span(.*)\<\/span\>)$之所以会选中全部文本,问题出在两个地方:一是^和$限定了要匹配整行内容,二是.*是贪婪匹配模式,会尽可能多地抓取字符,从第一个<span一直到最后一个</span>,自然就把中间的Lorem Ipsum也包含进去了。

要精准匹配那两个独立的<span>标签,忽略中间的文本,你可以用这个正则:

<span[^>]*>.*?</span>

我给你拆解一下这个正则的逻辑:

  • <span[^>]*>:匹配<span>的起始标签,[^>]*会匹配所有标签内的属性(比如class="exclass"或者title="This is an example"),而且不会误匹配到其他标签的>
  • .*?:这里用了非贪婪匹配(问号就是非贪婪的标志),会只抓取到第一个</span>前的内容,刚好对应每个<span>标签里的文本(也就是1.和*)
  • </span>:匹配闭合标签

记得要开启全局匹配修饰符g,这样就能一次性匹配到所有符合条件的<span>标签,而不是只匹配第一个。

举个实际使用的例子(比如JavaScript环境):

const htmlStr = '<span class="exclass">1.</span> Lorem Ipsum <span class="exclass2" title="This is an example">*</span>';
const spanRegex = /<span[^>]*>.*?<\/span>/g;
const matchedSpans = htmlStr.match(spanRegex);
// 结果会是:["<span class=\"exclass\">1.</span>", "<span class=\"exclass2\" title=\"This is an example\">*</span>"]

小提醒:如果之后你的HTML结构变得复杂(比如出现嵌套标签),正则就不是最佳方案了,这时候用DOM解析(比如浏览器的document.querySelectorAll('span'))会更靠谱,但针对你现在的场景,这个正则完全够用~

内容的提问来源于stack exchange,提问作者kennsorr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:13:54