首頁  >  問答  >  主體

JavaScript:RegExp.escape 函數是否存在?

我只想用任何可能的字串建立一個正規表示式。

var usersString = "Hello?!*`~World()[]";
var expression = new RegExp(RegExp.escape(usersString))
var matches = "Hello".match(expression);

有內建方法嗎?如果沒有,人們用什麼? Ruby 有 RegExp.escape。我覺得我不需要自己寫,一定有一些標準。

P粉381463780P粉381463780338 天前741

全部回覆(2)我來回復

  • P粉662089521

    P粉6620895212023-11-17 17:07:41

    對於任何使用 Lodash 的人,自 v3.0.0_.escapeRegExp 函數是內建的:

    _.escapeRegExp('[lodash](https://lodash.com/)');
    // → '\[lodash\]\(https:\/\/lodash\.com\/\)'

    並且,如果您不想需要完整的 Lodash 庫,則可能需要 就是這個功能

    回覆
    0
  • P粉734486718

    P粉7344867182023-11-17 14:43:25

    另一個答案中連結的功能不夠。它無法轉義 ^$ (字串的開頭和結尾)或 -,它們在字元組中用於範圍。 < /p>

    使用此功能:

    function escapeRegex(string) {
        return string.replace(/[/\-\^$*+?.()|[\]{}]/g, '\$&');
    }

    雖然乍看之下似乎沒有必要,但轉義- (以及^)使該函數也適合轉義要插入到字元類別中的字元作為正規表示式的主體。

    轉義 / 使該函數適合轉義要在 JavaScript 正規表示式文字中使用的字元以供以後評估。

    由於轉義它們中的任何一個都沒有壞處,因此轉義以覆蓋更廣泛的用例是有意義的。

    是的,令人失望的是,這不是標準 JavaScript 的一部分。

    回覆
    0
  • 取消回覆