提问人:Pedellen 提问时间:11/2/2021 最后编辑:Andy LesterPedellen 更新时间:11/3/2021 访问量:79
正则表达式匹配(替换)span 标记之间出现的所有双引号
Regex match (replace) all occurrences of double quotes in words between span tags
问:
我正在尝试替换两个跨度标签之间出现的所有“ 。
我使用:
(?<=<span>[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§'])*(\")(?=[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§']*<\/span>)
Lookbehind for letters+specialChars
找到 ”
Lookahead for letters+specialChars
但是使用 html 字符串
<span>d"s"s"</span>
它仅匹配上次出现的”
如何匹配(最终替换)标签中所有出现的双引号?
提前致谢。
答:
0赞
Ryszard Czech
11/3/2021
#1
用
/(?<=<span>[^<>]*)"(?=[^<>]*<\/span>)/g
请参阅正则表达式证明。
解释
--------------------------------------------------------------------------------
(?<= 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
评论
0赞
Pedellen
11/3/2021
嗯,似乎不起作用?没有捕获任何“字符?
2赞
Bohemian
11/3/2021
#2
不要打扰后面的样子。取而代之的是,匹配 where follows 而不找到早于 ,即在跨度开/关对内:"
</span>
<span>
</span>
"
"(?=((?!<span>).)*<\/span>)
观看现场演示。
分解正则表达式:
"
字面上的引用(?!<span>).
除 of<
<span>
((?!<span>).)*
任何字符,但不包括<
<span>
(?=((?!<span>).)*<\/span>)
后跟之前遇到的输入</span>
<span>
评论
0赞
Pedellen
11/3/2021
太好了,它工作得很好,但在以下情况下也有第二个捕获组:<span>“Mads”lkdjff</span>它也选择了一些“正常”字母 - 但它足以使用 :-)
0赞
Bohemian
11/3/2021
@Pedellen正则表达式只使用一个引号字符。正则表达式中的其他所有内容都是向前看(其中包含否定的向前看),环顾四周不会消耗或捕获。此正则表达式不会捕获任何组。
评论