2017-06-16 27 views
0

MDN x* : *Matches the preceding item x 0 or more times.*正規表現アスタリスク使用

によれば、本質的に先行する文字が完全に任意であるべきです。文字列は存在するかどうかにかかわらず一致します。あるべき ' ""' 両方の式が均等に存在していないので、0回にマッチしなければならないと

1.

var text = "foobar"; 
var re = /q*/; 
var found = text.match(re); 
console.log(found); // prints '["", index: 0, input: "foobar"]' 

しかし

var re = /qz*/; 
console.log(found); // prints 'null' 

:だからなぜそれがあることです戻ってきた。

または:

2.

var re = /fz*/; 
console.log(found); // prints '["f", index: 0, input: "foobar"]' 

しかし

var re = /fzq*/; 
console.log(found); // prints 'null' 

ここで何が起こっていますか?私の理解から、'fzq'は存在しないので、0回マッチする必要があり、 '' ''を返すべきでしょうか?文字列全体ではなく文字単位で一致すると、'fzq*''fz' - 'f'と同じ結果が返され、残りは0と一致します。しかし、明らかに、これは起こっていることではありません。

ここで何が起きているのか、誰かが少し光を当てることができますか?

答えて

2

x *:上記のxに0回以上一致します。

あなたは0回以上一致している*すべてにこの文を誤解しました。

q*と一致すると、正規表現は入力文字列内でqを検索します。 foobarにはqが存在しないため、空の文字列を返します。

あなたがqz*に一致するようにしようとすると、正規表現はqためzの任意の数を検索しようとします。入力文字列にqがないので、nullを返します。

*またはその他の量指定子で複数の文字を一致させるには、かっこでグループ化する必要があります。

(qz)* 

これは、文字列qzを0回以上一致させることを意味します。

正規表現を理解するには、https://regex101.com/サイトを使用できます。

関連する問題