2016-09-21 2 views
1

で働いていないのはなぜ私が「PW =」これらのテキストの間で例えば私の正規表現は、この特定のケース

"blablabla pw=0.5 alg=blablalbala" 

は私の0.5

正規表現になるだろう後に番号を取得したいです私は使用されました:

/.*pw=+(.*)\s+alg=.*/g 

javascriptの文脈では、私はその正規表現をマッチ関数で使ってnアンバー:

str.match(/.*pw=+(.*)\s+alg=.*/g) 

しかしregex101.comで、マッチングとハイライトの結果が全く一致していません(結果はハイライト部分ではないながら、正規表現が正確であることを示した)

+0

は – Pointy

答えて

3

あなたはグローバル/gを削除する必要がありますあなたの値の一致パターンを[\d.]*にすることをお勧めします。

グローバル修飾子をString#matchで使用すると、キャプチャされたグループの値はすべて破棄されます。

は、あなたが開始し、パターンの最後に.*を必要としない

str.match(/\bpw=([\d.]*)\s+alg=/) 
       ^^^^^^  ^

ノートのような正規表現を使用して、String#matchは(JavaでString#matches()とは違って)完全な文字列の一致を必要としません。 `/`/\ BPW =(\ S *)、または解析されるようにペアを一致させるために:

var str = 'blablabla pw=0.5 alg=blablalbala'; 
 
var m = str.match(/\bpw=([\d.]*)\s+alg=/); 
 
if (m) { 
 
    console.log(m[1]); 
 
}

+1

も例えば、より汎用的な作ることができる 'G'サフィックスを取り除きます後で '/ \ b([^ \ s =] +)=(\ S *)/'ならば、ループは連想配列を構築することができます。 –

+0

@IsmaelLuceno:はい、私たちは、この表現をさらに進化させることができます。例えば、[ - +]?[0-9] * \のような数字に対してより正確な正規表現を使うことができます。[0-9] +([eE '\ s + alg = 'を' \ s + \ w + = 'にするか、'(?:\文脈と入力が事前に検証されているかどうかについての詳細はありません。 –

+0

あなたのコードでは、mの最初の位置に何か他のことがありますか?私がstr.match()をjavascriptで使用すると、配列を返し、そのうちの1つは "pw = 0.8 alg ="です。なぜ私は理解していない –