2013-01-08 50 views
6

這裏的情況:分割在JavaScript中的字符,但不相鄰的一些

var stringExample = "hello=goodbye==hello"; 
var parts = stringExample.split("="); 

輸出:

hello,goodbye,,hello 

我需要這樣的輸出:

hello,goodbye==hello 

毗連/重複字符必須被忽略,只需要單個"="分裂。

也許一些正則表達式?

+1

在你想要分割的'='周圍總會有字母數字字符嗎?或者可以有'hello:=!goodbye'這樣的東西,應該分成'hello:'和'!goodbye'? –

回答

6

您可以使用正則表達式:

var parts = stringExample.split(/\b=\b/); 

\b檢查單詞邊界。

+0

我認爲只有平等標誌應該被忽略,而不是任何非字字。 – Bergi

+0

@Bergi我不知道我看到你的問題。你能想出一個例子嗎? –

+0

謝謝,很好的解決方案! –

3

最有可能的,@dystroys的答案是你正在尋找的。但是,如果除了字母數字(A-Za-z,0-9_)之外的任何字符都可能包含「拆分=」),那麼他的解決方案將不起作用。例如,串

It's=risqué=to=use =Unicode!=See? 

將被分成

"It's", "risqué=to", "use Unicode!=See?" 

所以,如果你需要避免的是,你通常會使用一個向後斷言:

result = subject.split(/(?<!=)=(?!=)/); // but that doesn't work in JavaScript! 

所以,即使這僅拆分爲單個= s,您不能使用它,因爲JavaScript不支持(?<!...)後視斷言。

幸運的是,你可以隨時通過是允許的一切配套變換split()操作成爲一個全球性match()操作符之間:

result = subject.match(/(?:={2,}|[^=])*/g); 

會給你

"It's", "risqué", "to", "use ", "Unicode!", "See?" 
+0

+1我想知道爲什麼在我測試的'split'的lookbehind無法正常工作。 「在Javascript中不起作用!」在什麼地方記錄? –

+0

@dystroy:http://www.regular-expressions.info/refflavors.html是我的這個(或RegexBuddy)的前往資源。 –

+2

'match'通常不等同於處理以分隔符開始/結尾的字符串的方式的「split」。另外,它可以返回null。轉換不是微不足道的:-)至少你需要使用'*'而不是'+' – Bergi

-1

作爲第一個近似的可能的解決方案可能是:

".*[^=]=[^=].*" 

請注意,這只是正則表達式,如果你想使用egrep,sed,java正則表達式或其他,請注意是否需要轉義。

請注意!:這是第一個近似值,可以改進。請注意,例如,這個正則表達式不會匹配這個字符串「=」(null - equal - null)。

+0

你能否精確地說明這個正則表達式應該如何用於OP的情況? –

+0

@dystroy'精確'不是一個動詞,但看着你的個人資料,我看你必須說法語。 – jackcogdill

+0

@dystroy我不明白你。什麼OP的意思? 如果您要求一個如何在程序中使用該正則表達式的示例,讓我們來看看它。 文件的內容: 你好=世界 hell0 == w0rld 再見=殘酷==世界 BY3 == cru3l = w0rld = == === – Ole

相關問題