代码之家  ›  专栏  ›  技术社区  ›  SWilk

是否可以在字符类中使用javascript regexp backreferences?

  •  0
  • SWilk  · 技术社区  · 15 年前

    javascript正则表达式是否支持字符类内的后向引用?

    我想这样做:

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

    但这行不通。这样做:

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

    不幸的是,我的属性名称可以包含撇号或引号,所以我需要从属性内部排除实际引用字符,但保留另一个。 我不知道用哪一个。我可以安全地假设引用是实体形式的,但里面仍然可以有撇号:

    <div attribute_name="John's car" class="someClass"></div>
    <div attribute_name='some &quot;quoted text&quot;' class="someClass"></div>
    

    我无法预测在该属性周围将使用“或”中的哪一个。

    如何去掉属性,让类属性单独存在(不要剪得太多)?

    语境: 我用$('templateContainer').innerhtml获取HTML。我必须先修改该HTML,然后再将其插入到页面中。我必须剪切一些非标准的属性和所有的ID属性。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Amber    15 年前

    您最好使用DOM或其他为分层内容设计的实际模型。也就是说,如果你 必须 使用regex,最简单的方法可能是使用 | (或)相反。

    htmlString.replace(/attribute_name=('[^']*'|"[^"]*")/,'')
    
        2
  •  3
  •   tavish    14 年前

    我同意其他的答案,因为我不认为属性是做这种事情的地方,但是我也谨慎地推荐DOM。当我这样做的时候,我只是觉得肮脏,我不知道为什么。

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

    至于您的问题,您也可以在javascript中使用非贪婪匹配,如下所示:

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

    Regular Expressions in JavaScript | evolt.org