簡體   English   中英

Javascript:將未關閉的標簽拆分為字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM