【问题标题】:JavaScript Regex, where to use escape characters?JavaScript 正则表达式,在哪里使用转义字符?
【发布时间】:2011-07-27 17:26:28
【问题描述】:

正则表达式允许使用以下字符:字母数字、空格、'-'、'_'、'&'、'()' 和 '/'

这是表达式

[\s\/\)\(\w&-]

我已经在各种在线测试人员中对此进行了测试,并且知道它可以正常工作,但我无法让它在代码中正常工作。我尝试的任何东西都会出现 sysntax 错误.. 有什么建议吗?

var programProductRegex = new RegExp([\s\/\)\(\w&-]);

【问题讨论】:

  • 无需在字符类中转义括号。即使用:/[-\s\/()\w&]/ 并记住破折号必须转义,除非在课程的开头或结尾。请参阅:regular-expressions.info 以获得出色的教程。
  • 我在 jQuery.uni-form.js 文件中注意到字符类中的正斜杠没有被转义,但代码工作正常。在字符类中转义正斜杠是否可能是可选的?我想知道 Sublime Text 2 也使用 TextMate Javascript 包的好处。
  • @ScottLahteine 我认为(从未找到任何关于此的文档)只有在 RegEx 文字 /slashes\/must/ 中才能被转义。当使用RegExp 构造函数时,它不会被转义

标签: javascript regex escaping


【解决方案1】:

用分隔符将你的正则表达式括起来:

var programProductRegex = /[\s\/)(\w&-]/;

【讨论】:

  • 可能是因为您将 RegExp 文字传递给 RegExp 构造函数。如果您有 RegExp 文字,则无需使用 RegExp 构造函数。
【解决方案2】:

您可以使用正则表达式语法:

var programProductRegex = /[\s\/\)\(\w&-]/;

您使用正斜杠来分隔正则表达式模式。

如果使用 RegExp 对象构造函数,则需要传入一个字符串。因为反斜杠是 JavaScript 字符串中的特殊转义字符,并且它们也是正则表达式中的转义字符,所以您需要使用两个反斜杠在字符串中进行正则表达式转义。使用字符串的等效代码将是:

var programProductRegex  = new RegExp("[\\s\\/\\)\\(\\w&-]");

原始正则表达式中的所有反斜杠都需要在字符串中转义才能正确解释为反斜杠。

当然第一个选项更好。当你从某个地方获取一个字符串并想用它制作一个正则表达式时,构造函数很有帮助。

var programProductRegex  = new RegExp(userInput);

【讨论】:

  • 为什么一定要在最后放一个,基本上就是一个分隔符吗?
  • 另请注意,您不需要在字符类中转义() 括号。
  • @ridgerunner:是的,也不是正斜杠,但我保留它们以保持与原始模式的一致性。
  • 带有双斜线的好提示。 (在这方面 Javascript 和 Java 一样令人讨厌)
  • 谢谢!我一直在寻找这个解释!
【解决方案3】:

如果您使用字符串并想要转义 ( 等字符,则需要编写 \\((意思是写反斜杠,然后是左括号 => 转义它)。

如果您使用RegExp 对象,则每个字符只需要一个反斜杠(如\(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多