我正在尝试用新行替换字符串的每个第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)

10-08 05:45
查看更多