JavaScriptのRegExpを使用して完全な単語に一致させようとしていますが、句読点が境界になっていると機能しません。つまり
(new RegExp("\b"+RegExp.escape("why not")+"\b", "i")).test("why not you foolish")
正しく一致します。そして:
(new RegExp("\b"+RegExp.escape("why not")+"\b", "i")).test("why nots you foolish")
正しく一致しません。問題は、単語が「?」で終わる場合、これが機能しないことです。
(new RegExp("\b"+RegExp.escape("why not?")+"\b", "i")).test("why not? you foolish")
助言がありますか?
注:私はこの関数を使用してエスケープしています:
# Escape characters for regexp
RegExp.escape = (text) ->
text.replace(/[-[]{}()*+?.,\^$|#s]/g, "\$&")
回答:
回答№1の場合は3?
RegExpで特別な意味を持ち、エスケープする必要があります。
わかりました、あなたはそれをエスケープしようとしています...しかし、すべてのブラウザがこのメソッドを持っているわけではありません RegExp.escape
ビルトインと思われる、これは問題です。原因
(new RegExp("\b"+"why not?"+"\b", "i")).test("why not? you foolish")
想定どおりに動作します(trueを返します)。
これは私が使用したコードです:
if (typeof RegExp.escape == "undefined") {
RegExp.escape = function(str) {
return str.replace(/([()[]\/+*?.-])/g, "\$1");
}
}
回答№2の場合は1
「?」正規表現の特殊文字です。逃げる必要があると思います。