【问题标题】:Using variable with escape character in RegExp在 RegExp 中使用带有转义字符的变量
【发布时间】:2013-12-27 07:45:14
【问题描述】:

您好,我在 JavaScript 中有以下正则表达式:

var re = new RegExp("\\[(\\d{8})([,|;]\\s*\\d{8})*\\]", "g");

当我将变量设置为等于第一个和最后一个括号(带有转义字符)时,我从元素的属性中获取并将这些变量传递给 RegExp,如下所示:



HTML:

div id="myid" left="\\[" right="\\]"/>

JavaScript:

bs = $("#myid");
left = bs.attr('left');
对 = bs.attr('right');

var re = new RegExp(left + "(\\d{8})([,|;]\\s*\\d{8})*" + right, "g");

我收到错误消息:

Uncaught SyntaxError: Invalid regular expression: /\\[(\d{8})([,|;]\s*\d{8})*\\]/: Unmatched ')' 

我在这里做错了什么?

谢谢

【问题讨论】:

  • Chrome,Mac OS X - 工作。
  • 也适用于我的 Chrome、Windows。
  • 嗯,当您明确设置变量时,它似乎工作。但是我从元素的属性中获取变量。请参阅我编辑的问题。这对你们有用吗?
  • 好的,现在你已经完全改变了问题——$('#myid'); 上的 html 是什么?
  • 随着您的更新,请参阅@Adassko 的回答。我认为它会解决它。

标签: javascript jquery regex escaping


【解决方案1】:

你不需要escape你的escape登录html属性

这些仅在 javascript 的字符串中需要。

只需替换

\\[

单人

\[

在你的属性中。

【讨论】:

  • 假设 html 最初看起来像 <div id='myid' left="\\[" right="\\]"></div> 这绝对是正确的答案。此外,定义的正则表达式实际上是双重转义everything,包括\d、\s。应该看起来像 left + "(\d{8})([,|;]\s*\d{8})*" + right
  • @r3mus: 不正确 - 你需要在这里对所有内容进行双重转义 - 一次用于 javascript,一次用于正则表达式。有两种在 javascript 中定义正则表达式的方法 - 在上面的示例中的字符串中或在斜杠之间,如 /(\d{8})([,|;]\s*\d{8})*/ - 在这种情况下,您不需要添加额外的斜杠
  • 哦,你说的没错。 left + "(\\d{8})([,|;]\\s*\\d{8})*" + right 是正确的。
猜你喜欢
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 2021-10-04
  • 2013-11-07
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多