Javascript 从字符串中删除html属性?

Javascript 从字符串中删除html属性?,javascript,css-selectors,Javascript,Css Selectors,我有一个html字符串,如下所示: <div id="demo_..." class="menu"> html代码以字符串形式提供。现在,我想删除所有以demo开头的id属性。结果应该是: <div class="menu"> 我知道它应该与正则表达式一起工作。但我有点为特殊角色而挣扎。正则表达式应该是什么样子,以便所有具有此格式的字符串都可以替换为空字符串?您可以使用 [att^=val] 表示具有att属性的元素,其值以前缀“val”开头。如果“val”是

我有一个html字符串,如下所示:

<div id="demo_..." class="menu">

html代码以字符串形式提供。现在,我想删除所有以demo开头的id属性。结果应该是:

<div class="menu">

我知道它应该与正则表达式一起工作。但我有点为特殊角色而挣扎。正则表达式应该是什么样子,以便所有具有此格式的字符串都可以替换为空字符串?

您可以使用

[att^=val]
表示具有att属性的元素,其值以前缀“val”开头。如果“val”是空字符串,则选择器不表示任何内容

[att$=val]
表示具有att属性的元素,其值以后缀“val”结尾。如果“val”是空字符串,则选择器不表示任何内容

[att*=val]
表示具有att属性的元素,其值至少包含子字符串“val”的一个实例。如果“val”是空字符串,则选择器不表示任何内容

对于你的情况,你可以使用

document.querySelectorAll('[id^="demo_"]')

结果将是一个具有
id
属性的HTMLElement数组,其值以前缀
demo
开头,或者如果使用
*
而不是
^
则包含
demo
。从那里,您可以使用
removeAttribute()
方法删除每个HTMLElement
id
att。更多的阅读


发布您迄今为止尝试过的内容。因此,你至少应该表现出努力的迹象
htmlstr.replace(/(]+)\bid\s*=\s*“demo”[^“]+”([^>]+>)/g,$1$2')
我从html.replace开始('id=“[^demo”]*”);你能解释一下这种方法吗?什么是$1和$2?$1是第一个帕伦斯捕获组,$2是第二个帕伦斯捕获组。因此,当被替换时,id被排除,但两个捕获组被放回。也可以使用lookahead和lookahead(lookahead在Safari中不起作用),有没有办法直接格式化submatch$1?我想删除最后一个空格$1。好答案@user120242。如果要避免结果字符串中出现额外的空格,并避免第二次捕获,可以使用以下命令:
htmlstr.replace(/(]+)\s+id\s*=\s*“demo”[^“]+”/g,$1')
。如果在
id
之前有属性,例如input
document.querySelectorAll('[id*="demo_"]')
document.querySelectorAll('[id^="demo_"]')
 .forEach(element => element.removeAttribute('id'));