3

タイトルは少し再帰的に見えるかもしれません、そして確かにそうです。

HTMLで表示されたJavascriptコードを強調表示/色付けできるJavascriptに取り組んでいます。したがって、インターネットブラウザでは、コメントは緑色になり、定義(for、if、whileなど)は濃い青色と斜体になり、数字は赤色になります。ただし、色付けはそれほど重要ではありません。

軽度の頭痛を引き起こし始めた2つの異なる正規表現を理解しようとしています。

1.正規表現を使用して正規表現を見つける

次のようなJavascriptを使用して、HTMLのスクリプトタグ内で正規表現を見つけたいと思います。

    match(/findthis/i);

、もちろん正規表現の部分は「/ findthis/i」です。

ルールは次のとおりです。

  1. 複数のオカレンス(/ g)を見つけることは重要ではありません。
  2. 同じ行にある必要があります(/ mではありません)。
  3. 大文字と小文字を区別しない(/ i)。
  4. バックスラッシュ(文字を無視)の直後にフォワードスラッシュ "/"が続く場合、スラッシュは式の一部であり、エスケープ文字ではありません。例えば:/itdoesntstop\/untilnow:/
  5. 隣り合う2つのスラッシュ(//)は次のとおりです。(A)最初:正規表現ではありません。コメントです。(B)後で:最初のスラッシュは正規表現の終わりであり、2番目のスラッシュは文字に他なりません。
  6. 正規表現は、改行または入力の終了(\ n | $)、またはエスケープ文字(ルール4に準拠する2番目のスラッシュ)に遭遇するまで続きます。ただし、2番目のスラッシュに続いて、アルファベット文字のみが検出される限り、それらは正規表現の一部と見なされます。例えば:/aregex/allthisispartoftheregex

これまでのところ、私が持っているのはこれです:

    '\\/(?:[^\\/\\\\]|\\/\\*)*\\/([a-zA-Z]*)?'

ただし、一貫性はありません。助言がありますか?

2.正規表現を使用して数字(英数字、浮動小数点)を検索します

自分で指を見つけるのは簡単です。ただし、浮動小数点数(複数のピリオドを含む)とアンダースコアを含む文字を見つけることは、より困難です。

以下のすべては数字と見なされます(新しい数字は各スペースの後に始まります):

3 3.1 3.1.4 3a 3.A 3.a1 3_.1

ルール:

  1. 複数のオカレンス(/ g)を見つけることは重要ではありません。
  2. 同じ行にある必要があります(/ mではありません)。
  3. 大文字と小文字を区別しない(/ i)。
  4. 数字は数字で始まる必要があります。ただし、数字の前または後に単語以外の(\ W)文字を続けることができます。例: " = 9.9 ;" ここで、「9.9」は実際の数です。「a9」は数字ではありません。数値の前のピリオド「.9」は数値の一部とは見なされないため、実際の数値は「9」です。
  5. 許可される文字:[a-zA-Z0-9_。]

私が持っているもの:

'(^|\\W)\\d([a-zA-Z0-9_.]*?)(?=([^a-zA-Z0-9_.]|$))'

それは私が望むようにはうまくいきません。

4

1 に答える 1

3

最初の部分では、あなたはかなり近いと思います。これが私が使用するものです(すべての二重エスケープを回避するために、正規表現リテラルとして):

/\/(?:[^\/\\\n\r]|\\.)+\/([a-z]*)/i

キャラクタークラスの後の2番目の選択肢であなたが何を意図したのかわかりません。ただし、ここでは2番目の選択肢を使用して、円記号とそれに続くすべてのものを消費します。最後の部分は重要です。これにより、次のように終わる正規表現を認識できます/backslash\\/。そして、?正規表現の最後は冗長でした。それ以外の場合は、これで問題ありません。

ここでテストしてください。

2番目の正規表現は、仕様にぴったりです。ただし、冗長な要素がいくつかあります。あなたがしたいと思うかもしれない主なことは、可能な最初のキャラクター以外のすべてをキャプチャすることです:

/(?:^|\W)(\d[\w.]*)/i

これで、実際の番号(最初の文字なし)がキャプチャグループに含まれ1ます。貪欲だけでもまったく同じことをするので、私は貪欲と先読みを取り除いたことに注意してください。

ここでテストしてください。

于 2012-12-05T14:36:34.993 に答える