我想在class属性中添加一个NewClass值,并使用一对正则表达式使用find / replace功能修改span的文本。
<div>
<span class='customer' id='phone$0'>Home</span>
<br/>
<span class='customer' id='phone$1'>Business</span>
<br/>
<span class='customer' id='phone$2'>Mobile</span>
</div>
我试图在搜索/替换后使用以下结果:
<span class='customer NewClass' id='phone$1'>Organization</span>
还想知道是否可以对两个任务使用单个查找/替换操作吗?
答案 0 :(得分:1)
正则表达式可以做到这一点,但请注意,使用正则表达式来更改HTML可能会有许多边缘情况,您可能没有考虑到这些情况。
This regex101 example显示这三个<span>
元素已更改为添加NewClass
,并且内容将更改为Organization
。
$("span#phone$1").addClass("NewClass");
$("span#phone$1").text("Organization");
所以要小心,你应该没事。
修改强>
根据对OP的评论,您只想更改包含ID phone$1
的范围,因此regex101链接已更新以反映此情况。
编辑2
固定链接太长而无法放入评论中,因此请在此处添加the permalink。单击底部的“内容”选项卡以查看替换。
答案 1 :(得分:0)
你可以使用这样的正则表达式:
'.*?' id='phone\$1'>.*?<
使用替换字符串:
'customer' id='phone\$1'>Organization<
<强> Working demo 强>
Php代码
$re = "/'.*?' id='phone\\$1'>.*?</";
$str = "<div>\n <span class='customer' id='phone\$0'>Home</span>\n<br/>\n <span class='customer' id='phone\$1'>Business</span>\n<br/>\n <span class='customer' id='phone\$2'>Mobile</span>\n</div>";
$subst = "'customerNewClass' id='phone\$1'>Organization<";
$result = preg_replace($re, $subst, $str);
结果
<div>
<span class='customer' id='phone$0'>Home</span>
<br/>
<span class='customerNewClass' id='phone$1'>Organization</span>
<br/>
<span class='customer' id='phone$2'>Mobile</span>
</div>
答案 2 :(得分:0)
由于您的代码包含preg_match
和preg_replace
,我认为您使用的是PHP。
正则表达式通常不是操纵HTML或XML的好主意。请参阅RegEx match open tags except XHTML self-contained tags SO post。
在PHP中,您可以将DOMDocument和DOMXPath与//span[@id="phone$1"]
xpath一起使用(获取所有span
标记id
属性vlaue等于phone$1
):
$html =<<<DATA
<div>
<span class='customer' id='phone$0'>Home</span>
<br/>
<span class='customer' id='phone$1'>Business</span>
<br/>
<span class='customer' id='phone$2'>Mobile</span>
</div>
DATA;
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xp = new DOMXPath($dom);
$sps = $xp->query('//span[@id="phone$1"]');
foreach ($sps as $sp) {
$sp->setAttribute('class', $sp->getAttribute('class') . ' NewClass');
$sp->nodeValue = 'Organization';
}
echo $dom->saveHTML();
请参阅IDEONE demo
结果:
<div>
<span class="customer" id="phone$0">Home</span>
<br>
<span class="customer NewClass" id="phone$1">Organization</span>
<br>
<span class="customer" id="phone$2">Mobile</span>
</div>