regex 正则表达式在两个其他字符串之间查找特定字符串

dw1jzc5e  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(167)

我有一个.html的混淆类名称,类似这样的class=“cd hk aw hs vu me hr”.我只想替换一个特定的类名称(例如“hk”)在整个html中.我需要一个正则表达式,可以帮助我实现这一点.
我发现了这样的表达方式:第一个月
所以我尝试了以下方法:(?<=class="[^"]*)(.*hk.*)(?="),但它也返回同一主体中的所有类。Result here
它应该只返回hk单词
任何帮助都是感激的。

bybem2ql

bybem2ql1#

强制性外科医生一般警告:you shouldn't use regex to parse HTML.
在这种非常有限的情况下,您 * 可能 * 使用

(<[^>]*class\s*=\s*"[^"]*)\bhk\b([^"]*")

并将其替换为\1whatever\2。然后"hk"变为"whatever",前提是它位于HTML标记内的类中。\b说明符将防止"ohka"匹配,\s确保"class ="和"class ="被同等对待。您需要一个多行修饰符

<p class
     ="ab hk cd" style="display: block">

您可以尝试使用https://regex101.com

更新(澄清):

(<[^>]*class\s*=\s*"[^"]*)\bhk\b([^"]*")

事实上,* 将 * 找到<body class="ab hk cd" style="x">并匹配和替换序列<body class="ab hk cd"。注意,在正则表达式中,第一部分--"hk"之前的部分--是圆括号,之后的部分也是圆括号。
"诀窍"在于替换公式,我在其中指定了"\1whatever \2"(在某些库中,它可以是$1whatever $2、${1} whatever ${2}或{$1} whatever {$2}等等),意思是 * 第一个括号中的组的内容进入\1 *,等等。
因此,这三个组将是:

'<body class="ab '      captured by '(<[^>]*class\s*=\s*"[^"]*)' into $1
'hk'                    captured by "\bhk\b" and discarded
 cd"                    captured by '([^"]*")' into $2

而替换的\1whatever\2将变为

\1                  whatever   \2
 '<body class="ab '  whatever   'cd"'

这就是想要的输出。用自己替换第一组和第三组感觉不必要和浪费,但我不知道有其他方法可以做到这一点-正则表达式替换需要重新生成 * 整个 * 匹配,而"额外"的部分需要正确地框住匹配本身。
(You例如,可以使用这种语法来交换围绕透视表的两个字符串)。

相关问题