javascript正则表达式是否支持字符类中的反向引用?
我想做这样的事情:
htmlString.replace(/attribute_name=(['"])[^\1]*\1/,'')
但这不起作用。这样做:
htmlString.replace(/attribute_name=(['"])[^'"]*\1/,'')
不幸的是,我的attribute_name可以包含撇号或引号,所以我需要从属性内部排除实际的引用字符,但保留另一个。 我无法确定使用哪一个。我可以放心地假设引号是实体形式,但内部仍然可以有撇号:
<div attribute_name="John's car" class="someClass"></div>
<div attribute_name='some "quoted text"' class="someClass"></div>
我无法预测属性周围会使用哪个“或”。
如何摆脱属性并单独保留class属性(不要过多削减)?
上下文: 我通过$('templateContainer')获取html。innerHTML。我必须先修改该html,然后再将其插入页面。我必须削减一些非标准的属性和所有ID属性。
答案 0 :(得分:3)
我同意其他答案,因为我不认为属性是做这类事情的地方,但我也对推荐DOM也很谨慎。我这样做时感觉很脏,我不知道为什么。
我通常会尝试使用javascript对象来存储我的数据,然后使用格式良好的键等引用它。耸肩这是更多的工作,但它更清洁恕我直言。但是,它绝对不是完成任务的唯一方法。
关于你的问题,你也可以在JavaScript中使用非贪婪匹配,它看起来像这样:
htmlString.replace(/ ?attribute_name=(['"]).*?\1/, '')
答案 1 :(得分:1)
使用DOM或其他一些专为分层内容设计的实际模型,你会更好。也就是说,如果必须使用正则表达式,最简单的方法可能就是使用|
(OR)代替。
htmlString.replace(/attribute_name=('[^']*'|"[^"]*")/,'')