正则表达式匹配(替换)跨度标签之间单词中所有出现的双引号
Posted
技术标签:
【中文标题】正则表达式匹配(替换)跨度标签之间单词中所有出现的双引号【英文标题】:Regex match (replace) all occurrences of double quotes in words between span tags 【发布时间】:2021-12-16 20:04:35 【问题描述】:我正在尝试替换两个跨度标签之间所有出现的 "。
我用:
(?<=<span>[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§'])*(\")(?=[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§']*<\/span>)
寻找字母+特殊字符
找到“
字母+特殊字符的前瞻
但是使用 html 字符串
<span>d"s"s"</span>
它只匹配最后一次出现的“
如何匹配(最终替换)标签中所有出现的双引号?
提前致谢。
【问题讨论】:
必须是正则表达式吗? 我更喜欢它,因为我已经抓取/匹配了所有跨度标签及其内容,然后再查看每个标签,检查“ 【参考方案1】:不要打扰后面的样子。相反,匹配"
,其中</span>
紧随其后,但没有找到早于</span>
的<span>
,即"
在一个跨度打开/关闭对:
"(?=((?!<span>).)*<\/span>)
见live demo。
分解正则表达式:
"
文字引用
(?!<span>).
除<
的<span>
之外的任何字符
((?!<span>).)*
最多但不包括 <
的 <span>
的任何字符
(?=((?!<span>).)*<\/span>)
后跟在 <span>
之前遇到 </span>
的输入
【讨论】:
Ecellent,它运行良好,但在以下情况下也有第二个捕获组:"Mads"lkdjff 它也选择一些“正常”字母 -但这已经足够了:-) @Pedellen 正则表达式仅使用单引号字符。正则表达式中的其他所有内容都是向前看(其中包含负面的向前看),并且环顾四周不会消耗或捕获。此正则表达式未捕获任何组。【参考方案2】:使用
/(?<=<span>[^<>]*)"(?=[^<>]*<\/span>)/g
见regex proof。
解释
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
<span> '<span>'
--------------------------------------------------------------------------------
[^<>]* any character except: '<', '>' (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
" '"'
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
[^<>]* any character except: '<', '>' (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
< '<'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
span> 'span>'
--------------------------------------------------------------------------------
) end of look-ahead
【讨论】:
嗯,好像没用?不捕获任何 " 字符?以上是关于正则表达式匹配(替换)跨度标签之间单词中所有出现的双引号的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式模式匹配第一个和最后一个标记之间的单词,第一个单词是常量