2012-10-04 34 views
0

可能重複:
JavaScript Split without losing character的JavaScript - 分裂不失分離

我有一個字符串:

"<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>" 

我想單獨的 「ABCDEFG」 的所有實例成像這樣的陣列:

["<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>"]; 

我嘗試:

var str="<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>"; 
var Array_Of_FooBars = str.split("</bar>"); 

alert(Array_Of_FooBars); 

但它產生:

["<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg",] 

它去掉分離器'。我不想那樣。

如何使用split而不會丟失字符串中的分隔符?

謝謝。 肯

+1

http://stackoverflow.com/questions/3047201/javascript-split-without-losing-character?rq=1 – 2012-10-04 06:58:13

+2

你有一串XML/HMTL元素,如' abcdefg'?我不這麼認爲。 (翻譯:當你編寫代碼時,它確實會適得其反,而且,你的問題是:*「我想在Y上執行X來獲得Z」。*它實際上應該讀取*「我有Y,想要Z,我該怎麼做?「* - 'split()'不是唯一可行的解​​決方案。) – Tomalak

+0

感謝Tomalak - 非常有幫助-_-如果你不知道答案 - 爲什麼要打擾你的消極反應? – KDawg

回答

3

試試這個。這不是一個完美的解決方案,但它應該在大多數情況下工作。

str.split(/(?=<foo>)/) 

也就是說,將它分成每個開標籤前的位置。

編輯:你也可以用match()做到這一點,就像這樣:

str.match(/<foo>.*?<\/bar>/g) 
+0

優秀的Namida Aneskans - 正是我問的。非常感謝你的兄弟:) – KDawg

+0

非常高興知道'.match()方法也能工作。 再次感謝納米達阿內斯卡納斯:)我認爲我喜歡這場比賽 - 因爲看起來會有更少的錯誤空間 - 匹配一端和另一端的所有東西,並抓住所有的一切?你怎麼看? – KDawg

0

使用positive lookahead,使正則表達式斷言特殊字符存在,但實際上並沒有與之相匹配的:

string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g); 
+0

確定 - 聲音很好。我會在你的例子中將''分隔符放在哪裏? – KDawg

1

你可以只遍歷一個簡單的正則表達式,並建立了陣列方式:

var x = new RegExp('<foo>(.*?)</bar>', 'ig'), 
s = "<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>", 
matches = []; 

while (i = x.exec(s)) { 
    matches.push(i[0]); 
} 

剛使用String.match()實現會更好;此代碼對於匹配標籤內的內容會更有用。

2

看來你很可能希望使用匹配:

var s = "<foo>abcd1efg</bar><foo>abc2defg</bar><foo>abc3defg</bar><foo>abc4defg</bar>" 
s.match(/(<foo>.+?<\/bar>)/g) 
// =>["<foo>abcd1efg</bar>", "<foo>abc2defg</bar>", "<foo>abc3defg</bar>", "<foo>abc4defg</bar>"] 
+0

我挖了這個,我刪除了我的答案+1這一個。 – elclanrs