我有串這樣的Javascript分割字符串
"(length>10)&(length<100)"
,我想這
(,length,>,10,),&,(,length,<,100,)
是否有可能得到使用JavaScript分裂和正則表達式。
我有串這樣的Javascript分割字符串
"(length>10)&(length<100)"
,我想這
(,length,>,10,),&,(,length,<,100,)
是否有可能得到使用JavaScript分裂和正則表達式。
"(length>10)&(length<100)".split(/([()><&])/).filter(Boolean)
["(", "length", ">", "10", ")", "&", "(", "length", "<", "100", ")"]
此分割在任:(
,)
,>
,<
或&
(所述 「或」 是得益於[]
左右)。
保留分割字符是由於捕獲(方括號周圍的圓括號 - 它是ES5,但不支持IE8及以下)。
最後,要刪除空字符串,我使用陣列上的filter(Boolean)
(也是ES5,不支持IE8及以下版本)。
result = subject.split(/\b|(?!\w)/);
此處分割字母數字和非字母數字字符之間的邊界,另外兩個非alnum字符之間。您可能會在字符串的開始/結尾處獲得空匹配項,因此您需要放棄零長度結果。
取而代之的是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: '<=', '&', '|=', ...
供參考,這稱爲令牌化或lexing。您可能想了解lexing和詞法分析器(和詞法分析器生成器)。 – Ashe 2012-07-13 07:37:24