![](/img/trans.png)
[英]replace special character }} in a string with “” using regexp in java
[英]Java RegExp: Capture part after a character but don't replace the character
我正在使用Java来解析JavaScript文件。 由于作用域与我在其中使用的环境不同,因此我尝试替换ie的每个实例
test = value
与
window.test = value
以前,我一直在使用
writer.append(js.getSource().replaceAll("test", "window.test"));
这显然不能推广,但对于固定数据集而言,它可以正常工作。
但是,在我应该使用的新文件中,旧文件的更新版本中,我现在必须处理
window['test'] = value
和
([[test]])
在这两种情况下,我都不想匹配test
,并且似乎只有这两种情况存在新格式。 所以我的计划是现在做一个正则表达式以匹配'
和[
作为第一个字符。 那将是([^'\\[])test
; 但是,我实际上并不想替换第一个字符-请确保它不是我不想匹配的两个字符之一。
这对我来说是一个新情况,因为我没有花太多时间来用RegExps进行替换,而只是进行模式匹配。 因此,我环顾四周,发现我认为是解决方案的方法,称为“非捕获组”。 Oracle页面上的解释听起来像我在寻找什么,但是当我将正则表达式重新编写为(?:[^'\\\\[])test
,它的行为与我没有做过的行为完全相同改变了一切-替换test
前的字符。 我环顾了StackOverflow,但发现的内容使我更加确信自己所做的应该可行。
我无法按预期工作,这是什么意思? 我在滥用图案吗?
如果您在正则表达式中包含该字符的表达式,则它将成为匹配项的一部分。
诀窍是使用您在替换字符串中匹配的内容,以便您自己替换该位。
尝试:
replaceAll("([^'\[])test", "$1window.test"));
替换字符串中的$ 1是对匹配的捕获组1的反向引用。 在这种情况下,这是测试前的字符
为什么不简单地对"(test)(\\s*)=(\\s*)([\\w\\d]+)"
? 这样,您只匹配"test"
,然后是空格,后跟一个'='
符号,后跟一个值(在这种情况下,由数字,字母和下划线组成)。 然后,您可以使用组(在括号之间)将值-甚至将空格(如果需要)复制到新文本中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.