2017-04-06 4 views
0

検索を使用して複数のケースを正規表現で照合しようとしています。Search()RegExpで余分なカッコを追加 - 正規表現が無効

var r = new RegExp(actualArr[i] + '(e?s)?(\>|$)', 'gi')

と私は、次のような検索を使用しています:私の正規表現がある

if(expected.search(r) !== -1){...}

私は、検索を使用してコンソールで正規表現を実行すると、それだけで正常に動作しますが、私の通過私は印刷

SyntaxError: Invalid regular expression: /(Squat(e?s)?/: Unterminated group

:アプリ私は次のエラーを取得します余分な(がここに追加されているのはなぜ

/Squat(e?s)?(>|$)/gi

:私の正規表現から、私はこれを取得しますか?私は何が欠けていますか?ここ

は、コードの完全なブロックです:サイドノートとして

let matchPlural = function(actual,expected) { 
     let actualArr = actual.split(" "); 
     for(let i = 0; i < actualArr.length; i++){ 
      let r = new RegExp(actualArr[i] + '(e?s)?(\>|$)', 'gi') 
      if (expected.search(r) !== -1){ 
       return true; 
      } 
     } 

     return false; 
    } 

、私はAngularJSで開発しています、私はそれが何に影響を与えるべきではないと思う...

答えて

0

時々actualArr[i]たI括弧で始まる単語の配列があるとします。括弧は正規表現でグループを定義するとして、あなたは'(e?s)?(\>|$)', 'gi')

を実行し、次のスニペットを使って単語をCONCAT、コンソール結果

var applyFix = true; 
 

 
let matchPlural = function(actual,expected) { 
 
    let actualArr = actual.split(" "); 
 
    for(let i = 0; i < actualArr.length; i++) { 
 

 
     let word = actualArr[i]; 
 
     
 
     // Remove any non-word character 
 
     if(applyFix) word = word.replace(/\W/g,''); 
 

 
     let r = new RegExp(word + '(e?s)?(\>|$)', 'gi') 
 
     if (expected.search(r) !== -1){ 
 
      return true; 
 
     } 
 
    } 
 
    return false; 
 
} 
 

 
console.log(matchPlural('Foo Dummy Squat','Hello Squate')) 
 
console.log(matchPlural('Foo Dummy Squat','Hello Squates')) 
 
console.log(matchPlural('Foo Dummy Squat','Hello Squats')) 
 
console.log(matchPlural('Foo Dummy (Squat','Hello Squats')) 
 

 
// Disable fix 
 
applyFix = false 
 

 
console.log(matchPlural('Foo Dummy (Squat','Hello Squats'))

+0

うわー、おかげで見たときに、この1は無効になります。..私は愚かな気がします、私はそれが最初の項目で失敗していたと仮定しました。これはうまく動作し、 'word'が正規表現の比較部分をスキップするために空の文字列であるかどうかのチェックを追加するだけでした。 もう一度おねがいします! –

関連する問題