2013-05-29 73 views
3

我有以下字符串:我怎麼能拆分此字符串容易

"<--something--><++something++><**something**>" 

字符串可以有「出頭」任意數量的,哪怕只有一次。

我需要它像這樣分割:

["<--something-->", "<++something++>", ...] 

但我不知道如何進行最好的。

我會做類似string.split("><")後來我會:

["<--something--", "++something++", ...] 

而且隨着string.split(/(><)/)我會得到:

["<--something--", "><", "++something++", "><", ...] 

我能想到的幾個低於最優解,但我想要一個真正優雅的。

+3

不要分割,匹配! –

+0

@Jack哦,這聽起來像一個很好的建議。 – MarioDS

+0

如果你想獲得內部內容('< >'內的東西') - http://jsfiddle.net/5qwNV/ – Ian

回答

3
var s = '<--something--><++something++><**something**>', 
    p = s.match(/(<[^>]+>)/g); 
console.log(p); // ["<--something-->", "<++something++>", "<**something**>"] 

這只是假設每個「標記」永遠不會有>之內。因此,它會失敗,出現以下:

<--some>thing--><++something++><**something**> 
    ^problematic 

我想強調的是,如果你使用這個來解析HTML,停在那兒。如果您想要從HTML獲取特定元素,則Regex不是正確的解決方案。相反,將內容放置在隱藏的<div>(或其他)中,並使用本機DOM訪問器。

4

你不是分裂字符串,你是匹配它。

試試這個:

string.match(/<(.)\1[^>]+?\1\1>/g) 

這將匹配<,兩個樣,然後找到一種相同的兩個>底。

2

該表達式應該這樣做:

"<--something--><++something++><**something**>".match(/<([+*-])\1.*?\1\1>/g) 

它的開度角托架,隨後由兩個相同的字符匹配(來自組+-*拍攝,但你可以只使用.匹配任意;它用相同的兩種字符和一個結束尖括號結束

-1

溶液:

var a = "<--something--><++something++><**something**>"; 
a.match(/\<(\-|\+|\*)+something(\-|\+|\*)+\>/g); 

結果:

["<--something-->", "<++something++>", "<**something**>"] 
+0

否,你正在創建匹配組。這不會做我想要的。另外,我的意思並不是文字。 – MarioDS

+0

你沒表示你不需要匹配組,並且可以替換的東西([\ w])+ –