1

標準的なシナリオでは正規表現を見つけることができません。これが正規表現でどのように達成されるかわからない。文字列がパターン内に存在しない場合にのみパターンを一致させる正規表現

Regex ---> (?is)[^:]\/\/ 
Payload ---> Regexp,test//check//last:// 
Matches ---> t// and k// 

問題:(ペイロード以下のように):「画像データ」私はテスト文字列が始まる場合にのみ//の一致を無視するように、上記の正規表現を変更する必要があります。 「:画像データ」よう

は、上記の正規表現を変更する方法を提案するテスト文字列で始まるので、それは私の基準(//の一致)のために一致していなければならない。このような場合には

Payload ---> data:image/png;base64,test//check//last:// 

私たちはこのケースを扱うことができます。

+0

とは一致しません文字列が第1の値で始まるかどうかをチェックします。とにかく、JS regexエンジンは無限のlookbehindをサポートしていないので、 '(?<!^ data:image。*)'を使うことはできません。 –

+0

すべてのペイロードに_all matches_が必要ですか? – degant

+0

はい、私はすべてのパターンを見つけてそれを取り除く必要があります。しかし、私はペイロードが "data:image"で始まる場合にのみこのアクションを実行したくありません(2番目のケースでは、パターンマッチが起きないようにしています)。 "一致すれば一致しません"のようなものを実現しようとしています –

答えて

0

あなたの質問が正しく理解されたら、正規表現を//のパターンと一致させ、先行する文字は:であってはなりません。また、テスト文字列がでない場合は、data:imageで始まる場合にのみ一致が行われます。

/(?!data:image)(?:.*?)([^:]\/\/)/giy 
  • (?!data:image)文字列がデータで起動しないことを保証します:イメージ
  • (?:.*?)非キャプチャ非欲張りマッチ
  • ([^:]\/\/)あなたの試合//:すべきではない直前の文字
  • /yは、以前の一致が終了した場所からのみ一致するようにスティッキーマッチを示します。その方法は、data:imageで始まる文字列のためには、何も

var regex = /(?!data:image)(?:.*?)([^:]\/\/)/giy 
 

 
// This shouldn't match since test string starts with data:image 
 
var payload = "data:image/png;base64,test//check//last://"; 
 
var match = regex.exec(payload); 
 
console.log(match); 
 

 
// This should find matches since payload doesn't start with data:image 
 
var anotherpayload = "Regexp,test//check//last://"; 
 
match = regex.exec(anotherpayload); 
 
while (match != null) { 
 
    // Accessing group 1 
 
    console.log(match[1]) 
 
    match = regex.exec(anotherpayload); 
 
}

+0

ありがとう!それはうまくいった。しかし、私はそれがどのように働いたかについて明確さを完了しなかった。なぜ正確に(?:。*?)がここに必要で、それがスティッキーな「y」フラグでどのように機能したのですか?より多くの入力や、私が参照できるドキュメントリンクを提供してください。 おかげで再び! –

+0

これらのデモで遊ぶことができます:https://regex101.com/r/Fp7paW/1とhttps://regex101.com/r/7UJVYD/1/。 '/?'スティッキーフラグは、前のマッチが終了した場所からのマッチングを続行するようにエンジンに指示します(これは、貪欲ではない)。もし文字列が 'data:image'で始まっていれば何も一致しません – degant

+0

JavaScriptのエンジンでクライアント側で正常に動作しましたが、サーバー側ではJavaパターンクラスを使用しています。あなたがこの問題を解決するために提案できるソリューション/代替案 Pattern.compile(regExp)の例外:java.util.regex.PatternSyntaxException:インデックスに近い不明なインラインモディファイア4 (?isy)(?! data:image)(?:。*?)([^:] //) –

関連する問題