2017-10-26 8 views
0

Javascriptでいくつかの正規表現を使用しています。私は、正規表現のさまざまな部分にフラグを適用できるようにしたいと思います。ここで私はこれまで持っているものです。私は、その正規表現のいずれかのマッチングパターンのためのいくつかの文字列を「清める」Regexp:異なるブランチの異なる場合のフラグ

'/[\<\>\+\*\(\)\-\@\`]|(^|[^!><'=])=($|[^=])|\band\b|\bor\b|\bnot\b|\btrue\b|\bfalse\b|\b[\d.]+\b/gi' 

const expressionRegexPattern = new RegExp([ 
    /[\<\>\+\*\(\)\-\@\`]/,              // math and other symbols except "=" 
    /|(^|[^!><'=])=($|[^=])/,              // only single "=" are valid 
    /|\band\b|\bor\b|\bnot\b/,             // bitwise operators 
    /|\btrue\b|\bfalse\b/,              // bools 
    /|\b[\d.]+\b/                 // numbers 
].map(function (r) { 
    return r.source; 
}).join(''), 'gi'); 

は基本的に、これはのは、次の正規表現にダウン激突ます。結果は、どのパターンとも一致しない値の配列です。

const expression = 'TEST > 0.1 and something_else not true'; 
const cleansedArray = expression.replace(conditionExpressionRegexPattern, ' ').trim().split(/ +/); 

結果は以下の配列のようになります。

['TEST', 'something_else'] 

私は何をしたいのですが、私は文字列の他の枝をテストできるように、この正規表現に「アドオン」ですが、大文字と小文字を区別します。大文字と小文字を区別しないフラグがあるので、最初の正規表現に追加することはできません。何かがそうであるように:

これは機能しませんが、うまくいけば、私は何を達成したいのアイデアを提供します。 mA、V、Aという単語は一致しますが、MA、v、aは一致しません。私は、大文字と小文字を区別する特定の "単語"を持つことができたいと思います。そして、それをグローバルに大文字と小文字を区別しない別の正規表現にまとめてください。

うまくいけば私はこれを非混乱の方法で説明しました!かなり長い間これを研究しようとしていたので、私はSOの天才に尋ねました。

+1

JS正規表現の大文字と小文字を区別することはできません。すべてまたはなし。 –

+0

私は2段階のプロセスでそれをやると思います。まず大文字と小文字を区別しないでください。その後、すべての一致した文字列を取得して、大文字と小文字を区別したバージョンで再度テストします。 –

+0

@FélixBrunet良いアイデア。それが私がやっていることであり、それはそのように機能します。回答セクションに投稿したいのであれば、私はそれを受け入れます。 – dvsoukup

答えて

0

@WiktorStribiżewが述べたように、JSでは、regexフラグは正規表現全体に作用し、その一部だけではありません。

あなたができることは、2段階の処理を行うことです。大文字と小文字を区別しない正規表現を使用して、大文字と小文字を区別しない正規表現を使用してフィルタを外した後、大文字と小文字を区別して正規表現を使用してテストする必要がある人。

関連する問題