2016-10-30 27 views
0

検索の式を「ホットキー」のJavascriptで検索する必要があります。 このオプションは、シーケンス:Ctrl + M, K, o, i以外のすべてを検出します。彼は...を見つけると、それは絶対に私たちは必要ありません:)「ホットキー文字列」の正規表現

EDIT:

(?=((ctrl|alt|shift|,|\.|\/)+?\s*[+\-/]\s*(((numpad\s*[\w/\*\-\+\.]+)|(ctrl|alt|shift|,|\.|\/|[a-z]+)+?,?)\s*(?=((([a-z],)\s*[a-z])\s*,?\s*)?)\1(?=([a-z])?)\1)))\1 

テストマルチストリングバリアント、大文字小文字を区別しない

<p>Ctrl + Insert, K</p> 
<ul>Ctrl +,</ul>' 
list Ctrl + , of end 
colomn Ctrl + .</>' 
<q>Ctrl + M</q>' 
<a>Ctrl + M, K, o, i</a> 
row Ctrl + M, , + P. While... 
<rom>Ctrl + M, K, p</rom>' 
<tag>Ctrl + M, Shift + O</tag>' 
press Ctrl + M, Shift + O, , + P! Thanks. 
Stop. Ctrl + M, Shift + O,/+ P</end> 
<anytag>Ctrl + Numpad +/-</anytag>' 

どこが間違っていますか?

*申し訳ありませんが、私はそれはあなたが-をエスケープしていないので、[+-/]が実際にASCIIの間の文字」として機能する文字クラスで. をキャプチャグループ(ctrl|alt|shift|,|\.|\/)+?では不十分な評判に

+0

この正規表現は一致する必要がありますどのような、 '+'と '/'( '[+ - /]')との間にはおそらくない範囲を... –

+0

@bobblebubble、あなたはそれが何を意味するのか分かりません?私はそれに遮蔽エラー「 - 」の兆候を修正した。私はすべてのブラウザでそれを試していませんが、正規表現はちょうど3つの文字として解釈する必要があります。[+ - /] ' - [' [+ \ - /] ' – Wenceslaus

+0

そうすることは必須ではありませんが、それが範囲として解釈される可能性は低くなります。 – vlaz

答えて

2

をプレビューを挿入することはできません。したがって...を捕捉することができる、すなわち+,-./ある+(43)と/(47)の値、。|前の最後のグループで 、あなたはまた、それが第.を捕捉させた。 は、エスケープすることによって、これを回避することができます-[+\-/]

(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*(,|\+)\s*((ctrl|shift|alt)\s*\+\s*)*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W) 

私はリアルタイムでの試合を見にhttps://regex101.com/を使用しています:ここで

は、私はあなたのために働くことが推測されたバージョンです。

  1. が、私はそれが単位(a-z,.+-/)を取得する必要があることを考えで始まるので、私は今持っている[a-z+\-.,/](私は[+-/]直接。
  2. を使用しなかった。そして、私たちはCtをキャプチャするべきではない混乱を避けるために、分離マッチとしてrlまたは任意の単語だから私は肯定後読み追加:[a-z+\-.,/](?=\W)
  3. をそれはシーケンスとして(、Ctrlキー、AltキーShiftキー)修飾キーで起動する必要があります - それ以外の場合は、のような通常の英語の単語を取り込むことができます。:(ctrl|shift|alt)\s*\+\s*[a-z+\-.,/](?=\W)
  4. 突然、0-9+-/とああNumpadは、また単位であるべきのは、単位を取得するため、ステップ1でグループを文字クラスを作成してみましょう:(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+)(?=\W)
  5. そして私はまた、捕捉ユニットの一つとしてInsertを追加します。(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(?=\W)
  6. 最後に、最初にキャプチャされたホットキー(修飾子+ユニット)の後に,(units)をキャプチャする繰り返しグループを追加します。(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)()*(?=\W)。うん、空白を追加して正規表現がまだバランスがとれていることを確認し、古いマッチのために働かせるために()*を追加してください。
  7. 私たちが思って、それが動作するように、我々は、空のブラケットにグループ2を入れて:, with units(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*,\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W)
  8. を我々はunit + unitグループをキャプチャしていないので、我々はキャプチャできないだけで、, + P/ + Pです!そして、我々はそれが回数...最も簡単かつもっとも怠慢な方法で繰り返されていて - 作成するセパレータとしても+,と同じレベル): - その手段(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*(,|\+)\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W)
  9. は、上記の理解を、私たちはCtrl + M, Shift + O,/+ P捕獲されることを望みます、我々はまた、ユニットの前面にオプションの修飾子を追加する必要があります(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*(,|\+)\s*((ctrl|shift|alt)\s*\+\s*)*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W)
+0

ありがとう!私は不注意だった。私はそれを修正しましたが、シーケンスはまだ見つからない 'Ctrl + M、K、o、i' – Wenceslaus

+0

無限に長いシーケンスを受け入れますか? '| .... 'の代わりに'(....)(\ s *、\ s * \ 1)* 'のようなパターンを考えれば、すべてのシーケンスをチェックする最初の大きなグループだけで作業する必要があります。 –

+0

残念ながら、私は正規表現を初めて使っています。あなたはここにあなたのオプションを書くことを複雑にしませんか?) – Wenceslaus