2016-10-14 17 views
1

myString 6 cyl, 3.2L (3197cc) engineを指定すると、次のように抽出する必要があります。6 cylおよび3197cc
このコードは失敗しており、修正方法がわかりません。 「ヌルのプロパティを読み取ることができません 『1』」正規表現を使用して特定のテキストを抽出する

const rgx = /(\d cyl).*(\d{2,4}?cc)/g; //defined outside a loop 

//inside the loop we have myString changes every run. 
    let match = rgx.exec(myString); 
    console.log(match[1]); // => 6 cyl 
    console.log(match[2]); // => 97cc <--------- suppose to be 3197cc 

周りに続いて次のループ、全部が

を言っ一致しません。

私は間違っていますか?

あなたがあなたの正規表現を変更し

(非貪欲対貪欲)、これは正規表現が可能な最小のマッチで一致させている周囲の括弧に一致していない
+0

レイジー: '*'&括弧をエスケープ==> [ '/(\ dがCYL)* \((\ dの{2,4} CC)。??? \)/ g'](https://regex101.com/r/UhEOnk/1) – Tushar

+0

完全なコードを追加できますか?ループと完全な文字列が質問にありません。 – Tushar

答えて

0

:私は削除

/(\d cyl).*\((\d{2,4}cc)\)/g 

?\d{2,4}からあなたが書いたものに基づいて、ccサイズが必要になると思われます(そして、オプションで本当に必要ならば、オプションでccも必要になります)

次に\((\d{2,4}cc)\)外側のかっこの前にバックスラッシュを付けて追加しました。これは正規表現が正しく動作するようにする括弧へのリテラル一致です。

const rgx = /(\d cyl).*\((\d{2,4}cc)\)/g; //defined outside a loop 
 

 
//inside the loop we have myString changes every run. 
 
    let match = rgx.exec('6 cyl, 3.2L (3197cc) engine'); 
 
    console.log(match[1]); // => 6 cyl 
 
    console.log(match[2]); // => 97cc <--------- suppose to be 3197cc

関連する問題