我希望匹配html标记名(例如< div>中的div),然后将该字符串拆分到匹配位置。
var str = '<div> div';
var regex = /(?:<)(\w*)(?=>)?/g;
var arr = str.split(regex);
console.log(arr);
//result: ["", "div", "> div"]
//expected: ["<", "> div"]
&#13;
然而,&#34;&amp; lt;&#34;这样做会迷路,而且我想要&lt;和&gt;除去。我怎样才能实现它?
这个也不起作用,因为那时&#34;假-d&#34;在字符串的末尾也会被分割,即使它不在&lt;和&gt;:
var str = '<div> div';
var regex = /(?:<)(\w*)(?=>)?/g;
var match = regex.exec(str);
var arr = match.input.split(match[1]);
console.log(arr);
//result: ["<", "> ", ""]
//expected: ["<", "> div"]
&#13;
答案 0 :(得分:0)
如果您只想使用单个正则表达式,最接近的一个是:
var regex = /\b(?:\w+)(?=>)/gi;
'<div> div'.split(regex);//["<", "> div"]
它给出了预期的行为,但这个问题的明显问题是它不检查前面的<
。并且javascript本身不支持lookbehind。
更好的方法可能是将<
和>
分开,然后将它们合并:
var str = '<div> div';
var ltRgx = /(?:\s|\b|^)(?=<)/gi;
var gtRgx = /\b(?:\w+)(?=>)/gi;
var result = str.split(ltRgx).map(function(d,i){
return d.split(gtRgx)
}).reduce(function(ac,d){
return ac.concat(d);
});
console.log(result);//["<", "> div"]
/*Another example*/
str = '<div> <img> div';
result = str.split(ltRgx).map(function(d,i){
return d.split(gtRgx)
}).reduce(function(ac,d){
return ac.concat(d);
});
console.log(result);//["<", ">", "<", "> div"]