私はこのような文字列を持っています
"(length>10)&(length<100)"
そして、私はこれが欲しい
(,length,>,10,),&,(,length,<,100,)
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)/);
これは、英数字と英数字以外の文字の間、さらに 2 つの非年号文字の間の境界で分割されます。文字列の先頭/末尾で空の一致が得られる可能性があるため、長さゼロの結果を破棄する必要があります。
の代わりに、トークナイザーのように動作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: '<=', '&', '|=', ...