2016-06-19 8 views
-2

文字列から3つの数値を取得するために、JavaScriptのmatch()関数を使用しようとしています。JavaScript match()正規表現が期待通りに動作しない

文字列の例:doSomething(14754572,782339,2,'')

そして、ここで私が使用しているJavaScriptのだが、結果なしで:

var $numbers = $onclick.match(/(\d*),(\d*),(\d)/); 
var first = $numbers[0] // Should be 14754572 
var second = $numbers[1] // Should be 782339 
var third = $numbers[2] // Should be 2 

私は正規表現がOKではないことを推測している...

+1

正規表現が[正しい]です(https://regex101.com/r/rS3aP9/ 1)。 * first *を書いてから、マッチ値全体を保持する '[0]'番目のグループにアクセスします。インデックスがあなたの期待している結果に合っている場合は、https://jsfiddle.net/mz900rfb/をご覧ください。 –

+0

新しいRegを定義して、.matchを検索しようとしましたか? – abdoutelb

答えて

4

正規表現は問題ありません。マッチ配列へのインデックスが正しくないことだけです。最初のエントリ[0]は、完全というテキスト(あなたの場合は"14754572,782339,2")です。その後、定義したキャプチャグループは、[1][2]、および[3]に与えられます。だから、それらのインデックスを調整するだけです。

var $onclick = "doSomething(14754572,782339,2,'')"; 
 
var $numbers = $onclick.match(/(\d*),(\d*),(\d)/); 
 
console.log($numbers[1]); // 14754572 
 
// Note ------------^^^ 
 
console.log($numbers[2]); // 782339 
 
// Note ------------^^^ 
 
console.log($numbers[3]); // 2 
 
// Note ------------^^^

だけFWIW、その正規表現は、オプションの空白の寛容ではないので、あなたはそこに\s*を追加することを検討してください。さらに、私は大手(を必要とするためにそれを更新する可能性があります:

// Leading (------------------vv 
var $numbers = $onclick.match(/\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d)/); 
// Optional whitespace ----------^^^-----^^^-^^^-----^^^-^^^ 
0

あなたはそれが正規表現のすべての一致に評価されていることがわかります$数字を記録した場合。したがって、この、何をする必要が代わりに0、1、2のインデックス1、2と3を選択することです:

var $numbers = $onclick.match(/(\d*),(\d*),(\d)/); 
var first = $numbers[1] // Returns 14754572 
var second = $numbers[2] // Returns 782339 
var third = $numbers[3] // Returns 2 
console.log('1:'+first,' 2:'+second,' 3:'+third); 
関連する問題