你如何从 /> 返回到 < 以及介于两者之间的所有内容? (Javascript)
How do you remove from /> back to < and everything in between? (Javascript)
我在使用 Javascript 处理某些 XML 时遇到问题,因为 Node 模块(libxslt 和 libxmljs)不知道如何处理自关闭标记。通过一些不同的测试,我将问题缩小到 XML 个自关闭的元素,如下例中的中心元素:
var string =
"<head>
<body>
<example />
</body>
</head>"
简而言之,我需要一种删除
的方法
<example />
完全;事先不知道位置,因为文档中有多个,也没有直接寻址标签名称,因为自闭标签因文档而异。
如果.replace()获取参数的位置ID,可以作为第二个参数与函数一起使用。像这样:
string.replace('/>', function(match){
//search from match back for the closest '<' and remove that substring.
})
您可以编写自己的正则表达式来捕获自闭合标签或经典标签之间的代码。
例如,如果您这样做:
var string =
"<head>
<body>
<example />
</body>
</head>"
var pattern = /<(.*) \/>/;
var result = string.replace(pattern, '');
您最终的字符串值将等于:
<head>
<body>
</body>
</head>
如果您想在线测试您的正则表达式,您可能需要访问 https://regex101.com/(您可以测试 Javascript 语言)
希望这对您有所帮助:)
感谢大家的建议;特别是@Tonioyoyo,他解决了我的问题,解决方案如下:
//Xml with random element tags
var xml = "<head><body><example1 /><example2 /><example3 /></body></head>"
//Convert to string
xml = xml.toString();
//Create pattern variable to match self-closing elements
var myRegexp = /.*?(\<\w+\s*\/\>).*/
//Removing all problem elements
var match = myRegexp.exec(xml);
while (match != null && match[1] != null) {
xml = xml.replace(match[1], '')
match = myRegexp.exec(xml);
}
//Log result
console.log(xml);
然而,真正的问题是添加了一个逗号,如下所示:
<opti,ons/>
使用节点包 'mssql' 从 SQL 移植到 Node.js 时(逗号不在源 SQL 中),这会产生标签不匹配错误。使用:
xml.toString();
xml.replace(<opti,ons/>, ''); //Fixes the mismatch tags error.
这意味着@Quentin 是正确的,Node 模块 libxslt 和 libxmljs 确实知道如何处理自闭合标签,因为添加的逗号是问题而不是标签。
我在使用 Javascript 处理某些 XML 时遇到问题,因为 Node 模块(libxslt 和 libxmljs)不知道如何处理自关闭标记。通过一些不同的测试,我将问题缩小到 XML 个自关闭的元素,如下例中的中心元素:
var string =
"<head>
<body>
<example />
</body>
</head>"
简而言之,我需要一种删除
的方法<example />
完全;事先不知道位置,因为文档中有多个,也没有直接寻址标签名称,因为自闭标签因文档而异。
如果.replace()获取参数的位置ID,可以作为第二个参数与函数一起使用。像这样:
string.replace('/>', function(match){
//search from match back for the closest '<' and remove that substring.
})
您可以编写自己的正则表达式来捕获自闭合标签或经典标签之间的代码。
例如,如果您这样做:
var string =
"<head>
<body>
<example />
</body>
</head>"
var pattern = /<(.*) \/>/;
var result = string.replace(pattern, '');
您最终的字符串值将等于:
<head>
<body>
</body>
</head>
如果您想在线测试您的正则表达式,您可能需要访问 https://regex101.com/(您可以测试 Javascript 语言)
希望这对您有所帮助:)
感谢大家的建议;特别是@Tonioyoyo,他解决了我的问题,解决方案如下:
//Xml with random element tags
var xml = "<head><body><example1 /><example2 /><example3 /></body></head>"
//Convert to string
xml = xml.toString();
//Create pattern variable to match self-closing elements
var myRegexp = /.*?(\<\w+\s*\/\>).*/
//Removing all problem elements
var match = myRegexp.exec(xml);
while (match != null && match[1] != null) {
xml = xml.replace(match[1], '')
match = myRegexp.exec(xml);
}
//Log result
console.log(xml);
然而,真正的问题是添加了一个逗号,如下所示:
<opti,ons/>
使用节点包 'mssql' 从 SQL 移植到 Node.js 时(逗号不在源 SQL 中),这会产生标签不匹配错误。使用:
xml.toString();
xml.replace(<opti,ons/>, ''); //Fixes the mismatch tags error.
这意味着@Quentin 是正确的,Node 模块 libxslt 和 libxmljs 确实知道如何处理自闭合标签,因为添加的逗号是问题而不是标签。