我有以下名为msg的字符串:
A64=20170210^A117=ABCDEF^A192=53012519.72^A193
我想用A117=
替换^
和GHIJK
之间的所有内容。
我想要这个;
A64=20170210^A117=GHIJK^A192=53012519.72^A193
我试过了:
msg=msg.replaceAll("A117=[^&]*\\^","A117="+"GHIJK"+"^");
然而它会返回:
A64=20170210^A117=GHIJK^A
为什么字符串的其余部分会消失。
答案 0 :(得分:2)
您可以使用A117=[^\\^]*
A117=[^\\^]*
:匹配A117=
[^\\^]*
匹配所有内容,直到^
字符
System.out.println("A64=20170210^A117=ABCDEF^A192=53012519.72^A193"
.replaceAll("A117=[^\\^]*", "A117=GHIJK"));
输出
A64=20170210^A117=GHIJK^A192=53012519.72^A193
演示
const regex = /A117=[^\^]*/g;
const str = `A64=20170210^A117=ABCDEF^A192=53012519.72^A193`;
const subst = `A117=GHIJK`;
const result = str.replace(regex, subst);
console.log(result);

答案 1 :(得分:2)
您的问题是您正在匹配贪婪(这是默认行为)。由于您的字符串中还有另一个^
,[^&]*\\^
将消耗所有内容(包括^
s),直到找不到另一个^
。您可以通过在*
:[^&]*?
附加问号来关闭贪婪行为。如果你使用它,它就不会与贪婪相匹敌,但是对于它将要找到的第一个^
将会感到满意。
答案 2 :(得分:1)
其余字符因条件[^&]*
而消失,基本上会搜索,直到找到&
个字符。
您也可以使用它:
msg=msg.replaceAll("A117=.*?\\^", "A117="+"GHIJK"+"^");