JavaScript

javascriptのRegExp

めも


var text = "java is awesome language java is awesome language";

var pattern = /java/g; //
typeof pattern; // "object"
var result;

//
result = pattern.exec( text );
// ["java", index: 0, input: "java is awesome language java is awesome language", groups: undefined]

result = pattern.exec( text );
// ["java", index: 25, input: "java is awesome language java is awesome language", groups: undefined]

result = pattern.exec( text );
// null

indexっていう値が 最初は0、2回目は25になっている。

答えは pattern につけた g フラグ

グローバルなマッチ。最初のマッチの後に止まることなくすべてのマッチを探す。

らしい。

なので最初のjavaにマッチした部分のindex 0

2回目はその続きで検索して次にマッチしたindexが25

3回目はもうマッチするところがなかったのでnullとなった。

だから。


var str = 'food1, food2, food3, food4';
var pattern = /food\d/g; // gフラグをつけている
var result;

result = pattern.exec(str);
// ["food1", index: 0, input: "food1, food2, food3, food4", groups: undefined]
result = pattern.exec(str);
// ["food2", index: 7, input: "food1, food2, food3, food4", groups: undefined]
result = pattern.exec(str);
// ["food3", index: 14, input: "food1, food2, food3, food4", groups: undefined]
result = pattern.exec(str);
// ["food4", index: 21, input: "food1, food2, food3, food4", groups: undefined]
result = pattern.exec(str);
// null

こうゆう感じ。


メソッドの違い


exec()

返り値

マッチした文字 or マッチしなかったら null


上記の続き

result

// ["food1", index: 0, input: "food1, food2, food3, food4", groups: undefined]
typeof result
// "object"
result[0]
// "food1"


test()

返り値

真偽値(true, false)**

マッチしたらtrue しなかったらfalse