正则expression式在IntelliJ中的反向引用

我想使用IntelliJ的查找和replacefunction来执行以下转换:

// Replace this model.put('foo', 'bar') // With this model['foo'] = bar 

我已经尝试了以下内容:

find的文本: model.put\((.*),(.*)\)replace为: model\[\\1\] = \\2

但是,Intellij似乎并不认可\\1\\2作为反向引用。 我也尝试过一个斜杠,但这也不起作用。

谢谢,唐

IntelliJ使用$1 replace反向引用。

从IntelliJ的帮助:

有关正则expression式及其语法的更多信息,请参阅java.util.regex的文档。后面的引用应该有$ n,而不是\ n格式。

总之,您必须使用$1$nreplace反向引用。 \1语法仅用于search内的反向引用。

在IntelliJ 2016中,应用内文档是误导性的。 这里是从完整的文档更好的引用:

如果需要在当前正则expression式之外的地方引用匹配的子string(例如,在另一个正则expression式中作为replacestring),则可以使用美元符号($ num,其中num = 1..n)检索它。

来源: 2016.1正则expression式语法,提示与技巧

IntelliJ IDEA / Reference /正则expression式语法参考


匹配子expression式并记住匹配。 如果您需要在同一个正则expression式中使用匹配的子string,则可以使用反向引用(\ num,其中num = 1..n)来检索它。 如果您需要在当前正则expression式之外的某个位置引用匹配的子string(例如,replace字段中的另一个正则expression式),则可以使用美元符号($ num,其中num = 1..n)检索它。 如果需要在子expression式中包含括号字符,请使用“(”或“)”。

Idea 9.0中的正则expression式(也可能是其他版本)的产品上下文帮助似乎是不正确的。 它说:

  返回参考
   \ n
  无论第n个捕获组匹配

但显然,正如前面的答案中所提到的,是我的经验,它是真正的$ n为后面的引用,而不是\ n

通过单击“replace文本”对话框中的“正则expression式”单选button旁边的“[帮助]”链接,可以获得该上下文帮助