我有一个字符串:
var str = ' not valid xml here <something unknown>123</something>\
<something hello>555</something>\
<something what>655</something>';
var matches = str.match(/something[^>]+>([^<]+)/g);
我希望匹配等于[123, 555, 655]
并且我认为()围绕我的正则表达式指出了这一点,但由于某种原因匹配等于["something unknown>123", "something hello>555", "something what>655"]
。我的解决方案是
matches.map(function(data){ return data.split('>').pop() })
但是我想知道通过直接编辑正则表达式是否有更优雅的方法来做到这一点,我想知道为什么()不起作用。
答案 0 :(得分:0)
Macmee,以及关于在regex中解析xml的所有常规免责声明,这里有一个简单的正则表达式,可以捕获你想要的内容:
<[^>]*>([^<]*)<\/
请参阅online demo(您正在寻找右下方窗格中的第1组捕获)。
确保使用g
来获取所有捕获信息 - 但您已经知道了。
以下代码也是完整的code demo。
<script>
var subject = '<something unknown>123</something>\
<something hello>555</something>\
<something what>655</something>';
var regex = /<[^>]*>([^<]*)<\//g;
var group1Caps = [];
var match = regex.exec(subject);
// put Group 1 captures in an array
while (match != null) {
if( match[1] != null ) group1Caps.push(match[1]);
match = regex.exec(subject);
}
document.write("<br>*** Matches ***<br>");
if (group1Caps.length > 0) {
for (key in group1Caps) document.write(group1Caps[key],"<br>");
}
</script>