2012-07-13 119 views
1

我有串這樣的Javascript分割字符串

"(length>10)&(length<100)" 

,我想這

(,length,>,10,),&,(,length,<,100,) 

是否有可能得到使用JavaScript分裂和正則表達式。

+0

供參考,這稱爲令牌化或lexing。您可能想了解lexing和詞法分析器(和詞法分析器生成器)。 – Ashe 2012-07-13 07:37:24

回答

3
"(length>10)&(length<100)".split(/([()><&])/).filter(Boolean) 

["(", "length", ">", "10", ")", "&", "(", "length", "<", "100", ")"] 

此分割在任:()><&(所述 「或」 是得益於[]左右)。

保留分割字符是由於捕獲(方括號周圍的圓括號 - 它是ES5,但不支持IE8及以下)。

最後,要刪除空字符串,我使用陣列上的filter(Boolean)(也是ES5,不支持IE8及以下版本)。

2
result = subject.split(/\b|(?!\w)/); 

此處分割字母數字和非字母數字字符之間的邊界,另外兩個非alnum字符之間。您可能會在字符串的開始/結尾處獲得空匹配項,因此您需要放棄零長度結果。

0

取而代之的是split,我會去爲一個全球性的match,它更像一個標記:

var input = "(length>10)&(length<100)"; 
var tokens = input.match(/\d+|[a-zA-Z]\w*|[()]|[<>=&|]+/g); 

它掃描輸入和匹配以下模式(按順序):

\d+   # one ore more digits 
|    # OR 
[a-zA-Z]\w* # an identifier 
|    # OR 
[()]   # a single opening- or closing parenthesis 
|    # OR 
[<>=&|]+  # one or more operators: '<=', '&', '|=', ...