2

jQuery datatablesライブラリファイルには、正規表現を作成するメソッドがあります。次の正規表現の意味を教えてもらえますか?

^(?=.*?il)(?=.*?oh).*$
4

2 に答える 2

11
^

入力の物乞いと一致します。これは、文字ではなく位置に一致します(文字間のスペースと考えてください)。

(?=)

これは先読みと呼ばれます。繰り返しますが、これは位置と一致します。一致する位置は、現在の位置の直前のテキストが指定されたテキストと等しい場所ですが、「ポインター」は前方に移動しません。飛び出さずに先を覗くようなものだと考えてください。

.*?il

任意の数の任意の文字(デフォルトでは改行を除く)に一致し、その後に文字「il」が続きます。

.*?oh

「oh」の文字を除いて、上記と同じです。

$

入力の終わりに一致します。

基本的に、この正規表現は、入力文字列に文字「il」と「oh」が含まれているかどうかを確認しています。

アナロジー:
このように考えてください。あなたは人のラインナップを持っていて、最初の人にステップアップします(^)。次に、赤い帽子をかぶった人が見つかるまで、一度に1人ずつ先を見越し、すぐに黄色い帽子をかぶっています。((?=.*?il))。ラインナップの最初の人に目を向けて検索を繰り返します。ただし、今回は紫色の帽子をかぶった人の直後に緑色の帽子をかぶっています((?=.*?oh))。最後に、すべての人を通り過ぎて、列の最後に到達するまで、各人をラインナップから引き出します(.*$)。いずれかの時点で、探しているものが見つからなかった場合は、振り返って部屋を出たはずです(falseを返すのと同じです)。そうでなければ、ラインナップの最後に来た後、あなたは「キャンディー!」と叫びます。(trueを返すのと同じです)。

関心のあるポイント:
先読みは、「貪欲でない」数量詞(*?)と呼ばれるものを使用します。これは基本的に「必要な数だけ一致しますが、それ以上は一致しません」と言います。貪欲な数量詞(*)は、「できるだけ多く一致する」と言います。貪欲な数量詞が使用されていた場合、それはあなたの目をラインナップの後ろに動かし、次に前に向かってスキャンし、最初の試合で停止するのと同じです(前から数えると、これはラインナップの最後になります)。

入力アンカー()の先頭を削除すると^、この式は壊滅的なバックトラックに対して脆弱になります。先読みは位置に基づいて一致するため、一致しない場合は、1文字前に進んで再試行します。は^、先読みを入力の最初の位置に固定します。彼らがその位置から探しているものを見つけることができない場合、彼らはただ失敗するでしょう。

.*$部分は綿毛です。式に影響を与えることなく削除できます(編集:実際には、入力をテストするだけの場合はそうです。結果の一致を使用している場合は、.*長さがゼロ以外の文字列を生成する必要があります)。ただし、入力が特定の長さであることを確認したい場合は、.{5,10}$代わりにを使用します。これは、ラインナップを歩き、引き抜いた人数を数え、「キャンディー」と叫ぶようなものです。5人以上10人以下を見つけた場合(代替案:{5,}-上限なしで5文字{0,10}以上;-で10文字以下0下限値として)。すでに文字「il」と「oh」を探しているとすると、入力が少なくとも4文字(上限なし)であるという暗黙の要件がすでにあります。

于 2012-10-03T15:01:04.680 に答える
1

http://gskinner.com/RegExr/を使用して、ほとんどの正規表現を分析し、入力データに対してテストすることができます。インターネットの周りには、このようなツールがいくつかあります。これにはFlashが必要です。(これはセールスポイントではなく、単なる情報です。)

私が提供しているURLは、のタグwikiページに記載されていることに注意してくださいregex

于 2012-10-03T14:57:56.250 に答える