/ / Regex:ルックアヘッドで否定的なケースを追加する - javascript、regex

正規表現:ルックアヘッドで否定的なケースを追加する - javascript、regex

私は次の正規表現を持っています ここに

/^_(?=S)([sS]*?S)_(?!_)|^*(?=S)([sS]*?S)*(?!*)/

この正規表現は2つのアンダースコアとそれらの間のテキストを一致させるように設計されています。例えば:

var regex = /^_(?=S)([sS]*?S)_(?!_)|^*(?=S)([sS]*?S)*(?!*)/;
var string = "_omgbbq_";
regex.exec(string);
>>>["_omgbbq_", "omgbbq", undefined]

しかし、私は追加ルールを追加したい - アンダースコアの前にバックスラッシュがある場合は無視する必要があります。例えば:

var string = "_omg\_bbq_"
regex.exec(string)
>>>["_omgbbq_", "omgbbq", undefined]

この正規表現にネガティブ・ケースを追加して、バックスラッシュが続くアンダースコアを無視できるようにするにはどうすればよいでしょうか?私の考えは、 先のことを考えるしかし、この正規表現はとても複雑なので、何かをぶち込まないでどこに挿入するのか分かりません。この正規表現では、ネガティブなケースを検出して無視するための先読みを追加できますか?

回答:

回答№1は2

あなたは使うことができます

var regex = /^_(?=S)([sS]*?[^s\])_(?!_)|^*(?=S)([sS]*?S)*(?!*)/;
^^^^^^^

私は S 否定された文字クラスに [^s] そして、 私たちが最も近いものと一致しないように _ バックスラッシュが前に付いている場合。

同じように文字列を一致させる必要がある場合 *omg*bbq* (あなたが持っている正規表現の2番目の選択肢を見てください)、同じテクニックを使うことができます:

var regex = /^_(?=S)([sS]*?[^s\])_(?!_)|^*(?=S)([sS]*?[^s\])*(?!*)/;

var regex = /^_(?=S)([sS]*?[^s\])_(?!_)|^*(?=S)([sS]*?[^s\])*(?!*)/g;
var string = "_omg\_bbq_ ";
console.log(string.match(regex));
string = "*omg\*bbq*";
console.log(string.match(regex));