何をいつ使うべきかを理解するために助けが必要です。 /x.*y/
と/x(?=.*y)/
の両方とも、文字列"sxcvgyb"
の方法test()
で使用した場合、同じ結果(true
)を示しています。JavaScriptの正規表現: `/ x。* y /`対 `/ x(?=。* y)/`
0
A
答えて
4
/x.*y/
と/x(?=.*y)/
は、test
メソッドを使用しているときの目的と同じです。
後者はa regular expression "look-ahead" group (?=...)
を使用しているため、一致すると技術的には.*y
がキャプチャされませんが、一致が存在するかどうかだけを知る必要がある場合には認識できません。
TL; DR:短い正規表現、/x.*y/
を選択してください。
// Identical when using `RegExp#test`
console.log(/x.*y/ .test('xylophone')) //=> true
console.log(/x(?=.*y)/.test('xylophone')) //=> true
// Different when using `RegExp#exec`
console.log(/x.*y/ .exec('xylophone')) //=> [ 'xy' ]
console.log(/x(?=.*y)/.exec('xylophone')) //=> [ 'x' ]
1
もしtest
方法で使用しているので、この結果は、この場合には同じであろう。
RegExp.prototype.test()
test()
メソッドは、通常の 式と指定された文字列を返します。 trueまたはfalseを返します。戻り
真正規表現と 指定された文字列の間のマッチがある場合。 、false。
、ここで見てみましょう:
const str = "sxcvgyb"
const test1 = RegExp(/x.*y/).test(str);
const result1 = str.match(/x.*y/);
const test2 = RegExp(/x(?=.*y)/).test(str);
const result2 = str.match(/x(?=.*y)/);
console.log('1st regex, is there a match? ', test1);
console.log('1st regex, what was matched? ', result1);
console.log('2nd regex, is there a match? ', test2);
console.log('2nd regex, what was matched? ', result2);
人ともマッチ何かを、これtest
結果が真です。しかし、実際に何が一致しているかを見れば、それらの違いを見ることができます。
これらの違いについてもう少し理解したいのであれば、@gyreの答えは "先読み"グループの説明には良いです。
また、@Aaronが提案されているので、regex101などのオンラインテスターを使用して、正規表現の機能を確認することをおすすめします。説明パネルをよく見て、それをよく理解してください。
関連する問題
- 1. AngularJS: `{{x + '、' + y}}対{{x}}、{{y}} '
- 2. xまたはx + yと一致する単純な正規表現
- 3. JSの正規表現Y
- 4. javascriptの(x、y)スライスアイテム
- 5. 正規表現* y * m * d
- 6. [[x]、[y]、[z]]と[x、y、z]の差
- 7. ∀X∃Yr(X、Y)、∃X∀Yr(X、Y)はどのように表現されますか?
- 8. (x/y)のペア(x/y)のタイプ
- 9. x = yとx = y == 1の違い
- 10. 正規表現 - すべてをXから次のYまでキャプチャします。
- 11. X、Y、Zを含む単語に一致する正規表現
- 12. A)precede_list(X、Y)
- 13. Pyautogui.click(x、y)error
- 14. Prolog述語half_sister_of(X、Y)の規則?
- 15. Classifier.fit(X、y)error
- 16. x = x + yとx = y + xが時々異なるのはなぜですか?
- 17. X対Yのチャートを作ろう
- 18. ペアX、Yは、式
- 19. コンピューティングのx^yの
- 20. KinectのSkeleton Joint.Positionの(X、Y)値は何ですか。 (X、Y、Z)?
- 21. なぜx、y平面のピクセル座標x + y *幅ですか?
- 22. Z3の場合、a3 = x * y * zの場合、3a <= x + y + z
- 23. LaTeX FooterのX of Y LaTeX FooterのY of X
- 24. は(x、y)のリストにX、Y numpyの行列を変換
- 25. overflow-yオーバーフロー-xオーバーライド
- 26. Matlabの可変範囲[x、y]の正規化
- 27. xの差| yとy <(x)をbashで?
- 28. は陰関数X + Yをプロット - ログ(X) - (Y)をログ-2 = 0 MATLAB
- 29. X及びY - アルゴリズム
- 30. TKinterキャンバスX、Yプロット
ブール値の結果(一致または不一致)をチェックしているだけの場合は、同等です。 – melpomene
https://regex101.com/r/gisqMQ/1対https://regex101.com/r/nEEYZ6/1;右側の説明パネルを確認してください。 – Aaron
あなたは答えを受け入れるべきです。 –