javascript regexp可以在角色类中进行反向引用吗?

时间:2010-02-16 10:35:06

标签: javascript regex backreference

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 &quot;quoted text&quot;' class="someClass"></div>

我无法预测属性周围会使用哪个“或”。

如何摆脱属性并单独保留class属性(不要过多削减)?

上下文: 我通过$('templateContainer')获取html。innerHTML。我必须先修改该html,然后再将其插入页面。我必须削减一些非标准的属性和所有ID属性。

2 个答案:

答案 0 :(得分:3)

我同意其他答案,因为我不认为属性是做这类事情的地方,但我也对推荐DOM也很谨慎。我这样做时感觉很脏,我不知道为什么。

我通常会尝试使用javascript对象来存储我的数据,然后使用格式良好的键等引用它。耸肩这是更多的工作,但它更清洁恕我直言。但是,它绝对不是完成任务的唯一方法。

关于你的问题,你也可以在JavaScript中使用非贪婪匹配,它看起来像这样:

htmlString.replace(/ ?attribute_name=(['"]).*?\1/, '')

Regular Expressions in JavaScript | evolt.org

答案 1 :(得分:1)

使用DOM或其​​他一些专为分层内容设计的实际模型,你会更好。也就是说,如果必须使用正则表达式,最简单的方法可能就是使用|(OR)代替。

htmlString.replace(/attribute_name=('[^']*'|"[^"]*")/,'')