をここでの大きな問題は、しかし、JavaScriptはない、あなたがnegative lookbehindを必要とするということですそれをサポートしていません。これは、粗、それをエミュレートすることが可能ですが、私は素晴らしいではありませんが、動作しますが、代替手段を提供します:
は
var input = '$10<i class="">$i01d</i>\\$id';
var regex = /\b\w+\b\$(?!\\)/g;
//sample implementation of a string reversal function. There are better implementations out there
function reverseString(string) {
return string.split("").reverse().join("");
}
var reverseInput = reverseString(input);
var matches = reverseInput
.match(regex)
.map(reverseString);
console.log(matches);
それはエレガントではありませんが、それは仕事を行います。ここではそれがどのように動作するかです:
のJavaScript はサポート先読み式((?>)
)と否定先読み((?!)
)を行います。これは負のlookbehindの逆であるため、の逆のの文字列との逆の正規表現を使用して、正確に一致させることができます。すべての試合が逆転するため、元の試合に戻す必要があります。
私は言ったようにエレガントではありません。文字列の操作が多いからです。あなたが望むものを正確に生成します。
See this in action on Regex101
あなたのケースでは、正規表現は
/(?<!\\)\$\b\w+\b/g
となりますので、
(?<!y)x
と表現する "をyそれは
が先行していないとして試合X長い" 正規表現の説明通常、 demonstration(JavaScriptではない)
wher e
(?<!\\) //do not match a preceding "\"
\$ //match literal "$"
\b //word boundary
\w+ //one or more word characters
\b //second word boundary, hence making the match a word
入力を逆にすると、すべてのトークンが一致するようになります。さらに、負の後読みがフォームx(?!y)
の否定先読みに反転されますので、新しい正規表現は、$ `======>` $ `\`
/\b\w+\b\$(?!\\)/g;
です....またはそれは 'でなければなりません\\ $ ' –
なぜ' $ id'ですか?これはブラックリストに載せられた言葉ですか?他のブラックリストに載っている単語はありますか? – wpcarro
$ idはブラックリストに載っていません。しかし、私は\ $と$ idで始まるすべての単語を除外したい。 –