我在Javascript中有以下字符串,需要删除<?xml ... ?>
和<!DOCTYPE .... ]>
标记。无法将其转换为dom,因为BR标记错误未关闭 - 并且无法编辑实际内容。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html [<!ENTITY amp "&#38;">]><div>Blah<br> Blah</div>
尝试使用.replace,但似乎无法到达那里
text.replace(/\<\?xml.+\?\>/g, '');
答案 0 :(得分:6)
replace()
适用于<?xml ... ?>
部分。
要删除<!DOCTYPE .... ]>
部分,您可以执行以下操作:
text.replace(/\<\?xml.+\?\>|\<\!DOCTYPE.+]\>/g, '');
答案 1 :(得分:4)
你可以使用这个正则表达式:
text.replace(/\<(\?xml|(\!DOCTYPE[^\>\[]+(\[[^\]]+)?))+[^>]+\>/g, '');
适用于:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html [<!ENTITY amp "&#38;">]><div>Blah<br> Blah</div>
<?xml version="1.0" encoding="UTF-8"?><div>Blah<br> Blah</div>
<!DOCTYPE html [<!ENTITY amp "&#38;">]><div>Blah<br> Blah</div>
答案 2 :(得分:0)
接受的答案有不必要的转义(反斜杠,使正则表达式更丑陋),这也有效:
const text = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html [<!ENTITY amp "&#38;">]><div>Blah<br> Blah</div>'
console.log(text)
const afterReplace = text.replace(/<\?xml.+\?>|<!DOCTYPE.+]>/g, '')
console.log(afterReplace)