[英]Javascript: split unclosed tags in string?
我有一種簡單的標記語言,支持以下語句:
<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。
我建議使用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);
我們可以用標簽(標記)將其拆分,然后修剪結果字符串以刪除任何空格。 過濾器刪除虛假值,包括空字符串。
str.split(/(<.+?>)/).filter(_ => (_.trim()));
console.log( "<pause> <state:OK> <fast> Oh <pause> sure, yep! <pause> Yep I certainly do".split(/(<.+?>)/).filter(_ => (_.trim())) );
正則表達式的樂趣:一千種為貓皮的方法。 😋
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});
當然,真正的問題是為什么要處理這些荒謬的數據。 放棄這一點,您可能想嘗試一下:
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.