Heim > Fragen und Antworten > Hauptteil
Ich möchte einfach einen regulären Ausdruck mit einer beliebigen Zeichenfolge erstellen.
var usersString = "Hello?!*`~World()[]"; var expression = new RegExp(RegExp.escape(usersString)) var matches = "Hello".match(expression);
Gibt es eine integrierte Methode? Wenn nicht, was verwenden die Leute? Ruby hat RegExp.escape
. Ich habe das Gefühl, dass ich nicht mein eigenes schreiben muss, es muss einen Standard geben.
P粉6620895212023-11-17 17:07:41
对于任何使用 Lodash 的人,自 v3.0.0 起 _.escapeRegExp 函数是内置的:
_.escapeRegExp('[lodash](https://lodash.com/)'); // → '\[lodash\]\(https:\/\/lodash\.com\/\)'
并且,如果您不想需要完整的 Lodash 库,则可能需要 就是这个功能!
P粉7344867182023-11-17 14:43:25
另一个答案中链接的功能不够。它无法转义 ^
或 $
(字符串的开头和结尾)或 -
,它们在字符组中用于范围。< /p>
使用此功能:
function escapeRegex(string) { return string.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&'); }
虽然乍一看似乎没有必要,但转义 -
(以及 ^
)使该函数也适合转义要插入到字符类中的字符作为正则表达式的主体。
转义 /
使该函数适合转义要在 JavaScript 正则表达式文字中使用的字符以供以后评估。
由于转义它们中的任何一个都没有坏处,因此转义以覆盖更广泛的用例是有意义的。
是的,令人失望的是,这不是标准 JavaScript 的一部分。