2017-04-27 13 views
0
const str = `zell class="www-some" bro and class="ded_Me" or addClass('coolman') also addClass("boo-boo")`; 

const allCssClassRegex = /addClass\(["|']([a-zA-Z0-9-_]+)["|']\)|class=["|']([a-zA-Z0-9-_]+)["|']/gi; 
let match; 

while ((match = allCssClassRegex.exec(str)) != null) { 
    console.log(match); 
} 

私は2つのパターンを一致させ、配列の2番目のメンバーを一致させようとしています。以下のように出力が見える:試合の第二のメンバーが定義されていないので、それは何らかの形でグループとして解釈されるリテラル(と思わJavascriptの正規表現は、リテラル括弧をグループ化していますか?

[ 'class="www-some"', 
    undefined, 
    'www-some', 
    index: 5, 
    input: 'zell class="www-some" bro and class="ded_Me" or addClass(\'coolman\') also addClass("boo-boo")' ] 
[ 'class="ded_Me"', 
    undefined, 
    'ded_Me', 
    index: 30, 
    input: 'zell class="www-some" bro and class="ded_Me" or addClass(\'coolman\') also addClass("boo-boo")' ] 
[ 'addClass(\'coolman\')', 
    'coolman', 
    undefined, 
    index: 48, 
    input: 'zell class="www-some" bro and class="ded_Me" or addClass(\'coolman\') also addClass("boo-boo")' ] 
[ 'addClass("boo-boo")', 
    'boo-boo', 
    undefined, 
    index: 73, 
    input: 'zell class="www-some" bro and class="ded_Me" or addClass(\'coolman\') also addClass("boo-boo")' ] 

(1、2つのスロットが一致しています)。

この正規表現を修正して2番目の配列スロットを一致させるにはどうすればよいですか?

答えて

3

あなたのパターンを持ついくつかの問題があり、それはおそらく多少凝縮することができます。また

/(?:addClass[(]*|class=)["']([a-zA-Z0-9_-]+)["'][)]*/gi; 

文字クラス内の[9-_]あなたはおそらくしたくない_9を、意味しています。 [9_-](「 - 」)が最後になるように文字を並べ替えると、それが機能します。

関連する問題