我有一个简单的标记语言,支持如下语句:
<pause> <state:OK> <fast> Oh <pause> sure, yep! <pause> Yep I certainly do
我想将这些语句拆分为像
这样的数组 ["<pause> ", "<state:OK> ", "<fast>", "Oh ", "<pause>", "sure, yep! ", "<pause>", " Yep I certainly do!"]
我试图使用像
这样的正则表达式line.split(/(?=<.+>)/)
但我得到的数组是
["<pause> ", "<state:OK> ", "<fast> Oh ", "<pause> sure, yep! ", "<pause> Yep I certainly do!"]
我应该在第一个字符串上使用什么正则表达式来获得我想要的结果?
请注意,我没有解析HTML。
答案 0 :(得分:2)
我建议使用match
代替split
:
var line = "<pause> <state:OK> <fast> Oh <pause> sure, yep! <pause> Yep I certainly do";
var arr = line.match(/<.+?>|\S[^<]*?(?=\s*(<|$))/g)
console.log(arr);
答案 1 :(得分:0)
我们可以通过标签(标记)将其拆分,然后修剪生成的字符串以删除任何空格。过滤器删除虚假值,包括空字符串。
str.split(/(<.+?>)/).filter(_ => (_.trim()));
console.log(
"<pause> <state:OK> <fast> Oh <pause> sure, yep! <pause> Yep I certainly do".split(/(<.+?>)/).filter(_ => (_.trim()))
);
答案 2 :(得分:0)
正则表达的乐趣:有一千种皮肤猫的方法。
const str = '<pause> <state:OK> <fast> Oh <pause> sure, yep! <pause> Yep I certainly do';
const regex = /((?:<[^>]+>\s|\b[^<>]+))/g;
const matches = str.match(regex);
console.log({matches});
答案 3 :(得分:-1)
当然,真正的问题是你为什么要处理这些荒谬的数据。事实上,你可能想尝试这个:
var testStr = '<pause> <state:OK> <fast> Oh <pause> sure, yep! <pause> Yep I certainly do';
function weirdSplit(str){
return str.match(/<[^>]+>|[^ ]+[^<>]+(?=\s|$)/g);
}
console.log(weirdSplit(testStr));
&#13;