1

私はこのような文字列を持っています

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

そして、私はこれが欲しい

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

JavaScript分割と正規表現で取得することは可能ですか?

4

3 に答える 3

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

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

(これは、 、)><または(「または」は周囲&のおかげです) のいずれかで分割されます。[]

分割文字の保持は、キャプチャのおかげで行われます (角括弧を囲む括弧 - ただし、ES5 であるため、IE8 以下ではサポートされていません)。

最後に、空の文字列を削除するためfilter( Boolean )に、配列で使用します (ES5 も、IE8 以下ではサポートされていません)。

于 2012-07-13T07:41:12.590 に答える
2
result = subject.split(/\b|(?!\w)/);

これは、英数字と英数字以外の文字の間、さらに 2 つの非年号文字の間の境界で分割されます。文字列の先頭/末尾で空の一致が得られる可能性があるため、長さゼロの結果を破棄する必要があります。

于 2012-07-13T07:41:26.253 に答える
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: '<=', '&', '|=', ...
于 2012-07-13T07:47:24.633 に答える