我只想用任何可能的字串建立一個正規表示式。
var usersString = "Hello?!*`~World()[]"; var expression = new RegExp(RegExp.escape(usersString)) var matches = "Hello".match(expression);
有內建方法嗎?如果沒有,人們用什麼? Ruby 有 RegExp.escape。我覺得我不需要自己寫,一定有一些標準。
RegExp.escape
對於任何使用 Lodash 的人,自 v3.0.0 起 _.escapeRegExp 函數是內建的:
_.escapeRegExp('[lodash](https://lodash.com/)'); // → '\[lodash\]\(https:\/\/lodash\.com\/\)'
並且,如果您不想需要完整的 Lodash 庫,則可能需要 就是這個功能!
另一個答案中連結的功能不夠。它無法轉義 ^ 或 $ (字串的開頭和結尾)或 -,它們在字元組中用於範圍。
^
$
-
使用此功能:
function escapeRegex(string) { return string.replace(/[/\-\^$*+?.()|[\]{}]/g, '\$&'); }
雖然乍看之下似乎沒有必要,但轉義- (以及^)使該函數也適合轉義要插入到字元類別中的字元作為正規表示式的主體。
轉義 / 使該函數適合轉義要在 JavaScript 正規表示式文字中使用的字元以供以後評估。
/
由於轉義它們中的任何一個都沒有壞處,因此轉義以覆蓋更廣泛的用例是有意義的。
是的,令人失望的是,這不是標準 JavaScript 的一部分。
對於任何使用 Lodash 的人,自 v3.0.0 起 _.escapeRegExp 函數是內建的:
並且,如果您不想需要完整的 Lodash 庫,則可能需要 就是這個功能!
另一個答案中連結的功能不夠。它無法轉義
^
或$
(字串的開頭和結尾)或-
,它們在字元組中用於範圍。使用此功能:
雖然乍看之下似乎沒有必要,但轉義
-
(以及^
)使該函數也適合轉義要插入到字元類別中的字元作為正規表示式的主體。轉義
/
使該函數適合轉義要在 JavaScript 正規表示式文字中使用的字元以供以後評估。由於轉義它們中的任何一個都沒有壞處,因此轉義以覆蓋更廣泛的用例是有意義的。
是的,令人失望的是,這不是標準 JavaScript 的一部分。