【问题标题】:JavaScript Regex Replacement with Reference带有参考的 JavaScript 正则表达式替换
【发布时间】:2014-01-13 17:33:07
【问题描述】:

我在使用 JavaScript 正则表达式语句时有点吃力 - 我不太明白哪里出了问题。我已经在在线工具中进行了测试,他们认为它应该可以工作,所以我假设我习惯的 C# 正则表达式和 JavaScript 之间存在一些不同。

我正在使用的字符串非常简单:

[a] + [b]

我尝试使用的正则表达式匹配是:

/[(?<name>[a-zA-Z0-9])/]

我正在尝试用以下值替换该值:

viewModel.$1.control.value()

这应该留给我:

viewModel.a.control.value() + viewModel.b.control.value()

不幸的是,我总是打印我的初始值,这表明我的匹配不起作用,但我不明白为什么。我尝试的唯一明显的事情是在正斜杠和反斜杠之间切换方括号的转义。

谁能建议还有什么问题?

【问题讨论】:

  • 是的,用正斜杠转义是非常错误的,实际上应该是语法错误。所以如果你能先解决这个问题。接下来,据我所知,JavaScript 不支持命名捕获……这也应该是语法错误。你检查过你的控制台吗?

标签: javascript regex


【解决方案1】:

Javascript 正则表达式中没有命名组。使用这个:

var s = '[a] + [b]';
repl = s.replace(/\[([a-zA-Z0-9])\]/g, 'viewModel.$1.control.value()');
//=> "viewModel.a.control.value() + viewModel.b.control.value()"
  • 您还需要转义 [] 以便在正则表达式中匹配它们。

【讨论】:

  • 你应该补充说你修复了转义
  • 我想你刚刚抛出了一些我以前从未见过的东西——s.replace 字符串的第一个参数如何?
  • 是的,因为代码在替换字符串中使用$1'viewModel.$1.control.value()' 因此组#1 中捕获的任何内容都将在字符串'viewModel.$1.control.value()' 中替换,最终字符串变为'viewModel.a.control.value()''viewModel.b.control.value()'
  • 抱歉 - 我明白这一点,只是让您惊讶的是正则表达式字符串周围没有单引号或双引号。
  • 哦,Javastcript 中的正则表达式字符串包含在 // 中,否则我们可以使用 new RegExp constrictor。
猜你喜欢
  • 2010-11-12
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多