2013-08-16 53 views
-2

我有以下字符串<=10 & <20,我想拆分這個字符串,因此它給出了以下結果('<=' '10' '<' '20') &是不相關的,因爲我在不同的區域處理該字符串我的代碼!謝謝我想分割一個字符串,但我想保留分隔符

+1

結果放入數組櫃面你想知道爲什麼我試圖做到這一點 –

+2

正則表達式是解決 – karaxuna

+0

的&是無關緊要的,我只是想分割字符串,但能夠保持我的分隔符 –

回答

4

你可以使用正則表達式。

"<=10 & <20".match(/(([<=>]+)|(\d+))/g) 

返回正是你需要的:

["<=", "10", "<", "20"] 

當然最後的正則表達式取決於從什麼是可能的運營商你的字符串可以有

,如果您還需要支持你的問題可能的例子對於負值,您可以將表達式更改爲:

"<=10 & <-20".match(/(([<=>]+)|(-?\d+))/g) 

,結果如下:

["<=", "10", "<", "-20"] 
+1

請注意,這將高興地匹配<=>> =作爲一個單一的運營商... – SmokeyPHP

+0

這是完美的:)運營商'<=' '<' '> =''>'',並且這可以處理它們全部 –

+0

@SmokeyPHP你是對的。謝謝。正如我所說,最終的正則表達式實際上取決於最終的要求。因爲我不知道字符串可能存在的所有可能的值,所以我只展示了原始問題的主要思想和具體解決方案。 – Artem

0

這是你想要做的嗎?

var str; 

str = '<=10'; 
str.match(/([^0-9]+)([0-9]+)/); // ["<=10", "<=", "10"] 

str = '<20'; 
str.match(/([^0-9]+)([0-9]+)/); // ["<20", "<", "20"] 
0

這應該做你在做什麼(可確保>=<=><正確的語法)後:

"<=10 & <20".match(/(<|>)=?|(\d+)/g);//["<=", "10", "<", "20"] 
1

好像你wan't來標記像編譯字符串做。如果你已經參加過計算機科學課程,你應該知道Lexical Analysis。總之,你需要一個狀態機來靈活地標記字符串。我沒有看到解決這一要求的另一種方式。

就在算法的一瞥:

var tokens = new Array(); 
var inputStr ...; 

... a lot of state variables 

var currentState = LexicalAnalysisStates.START; 

for (var i = 0; i < inputStr.length; i++) { 
    var nextChar = input.charAt(i); 
    switch (currentState) { 
    case LexicalAnalysisStates.START: ...; // process nextChar considering START state 
    case LexicalAnalysisStates.DIGIT: ...; // process nextChar considering DIGIT state 
    case LexicalAnalysisStates.EQUAL: ...; // process nextChar considering EQUAL state 
    } 
} 

... here you should have your token collection populated 

提示:通過繪製的最終狀態機的草圖,像this one

編輯開始:更新的代碼JavaScript語法阿爾喬姆的評論之後。然後

+2

這個答案是否真的相關/必需? – SmokeyPHP

+0

爲什麼不能?一個簡單的正則表達式不會幫助OP,如果我對他的需求的假設是有效的,她的分裂需求變得更加複雜... – samuelgrigolato

+1

@samuelgrigolato雖然你的答案對Java有價值,但標籤爲「javascript」的問題 – Artem