我正在尝试用新行替换字符串的每个第4个逗号。
在下面的javascript中效果很好
var str = "blue,red,green,orange,yellow,brown,black,teal,purple,gold,silver"
str = str.replace(/(([^,]*,){4}([^,]*)),/g, '$1\n').
并给我正确的输出,如下所示:
蓝色,红色,绿色,橙色,黄色
棕色,黑色,蓝绿色,紫色,金色
银
我正在尝试在Java中执行相同的操作
String str = "blue,red,green,orange,yellow,brown,black,teal,purple,gold,silver";
str = str.replaceAll("([^,]*,){4}([^,]*)", "$1\n");
输出:
橙子,
蓝绿色
,黄金白银
任何人都可以帮助我获得正确的表达式,以用Java中的新行替换nth(fourth)逗号
最佳答案
在JavaScript模式中,您有两个选择组嵌套在一个选择组中,$1
引用选择组以及其中的其他两个选择组。
在Java模式中,您有两个选择组,而没有其他选择组,$1
引用第一个选择组,而不是像JavaScript模式中那样包含另一个选择组。
在JavaScript中删除第一个选择组的花括号会产生意外的结果,因此在Java模式周围添加花括号应该可以解决您的问题。
什么地方出了错
第一个模式的选择组sls
之前
//JavaScript
var str = "blue,red,green,orange,yellow,brown,black,teal,purple,gold,silver"
str = str.replace(/(([^,]*,){4}([^,]*)),/g, '$1\n').
//Output:
//blue,red,green,orange,yellow
//,brown,black,teal,purple
//,gold,silver
//Java
String str = "blue,red,green,orange,yellow,brown,black,teal,purple,gold,silver";
str = str.replaceAll("([^,]*,){4}([^,]*)", "$1\n");
//Output:
//orange,
//teal,
//,gold,silver
Regexr for Java pattern (not fixed yet)
后
//JavaScript
var str = "blue,red,green,orange,yellow,brown,black,teal,purple,gold,silver"
str = str.replace(/(([^,]*,){4}([^,]*)),/g, '$1\n').
//Output:
//blue,red,green,orange,yellow
//,brown,black,teal,purple
//,gold,silver
//Java
String str = "blue,red,green,orange,yellow,brown,black,teal,purple,gold,silver";
str = str.replaceAll("(([^,]*,){4}([^,]*)),", "$1\n");
// These were added --^------------------^^
//Output:
//blue,red,green,orange,yellow
//,brown,black,teal,purple
//,gold,silver
Regexr for Java pattern (fixed)