【问题标题】:Java and Javascript regular expressionJava 和 Javascript 正则表达式
【发布时间】:2016-09-15 17:26:59
【问题描述】:

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

【问题讨论】:

  • 这不是有效的java。它不会编译。从那开始,我们会看到我们能做些什么。
  • This Regexr 揭示了按预期工作的模式......
  • @ThisNameBetterBeAvailable - 谢谢,我试过了 - (([^,]*,){4} - 我看到第一行和第二行中出现了我不想要的逗号。任何线索如何删除那个。
  • 捕获缓冲区被覆盖每个量化通道。 ([^,]*,){4} 所以你只能得到最后一个。使用相同的正则表达式有什么问题?

标签: java regex


【解决方案1】:

在 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)

【讨论】:

  • 非常感谢您的解释。(([^,]*,){4})。我试过这个 - (([^,]*,){4}) - 我看到了逗号出现在我不想要的第一行和第二行的末尾。任何线索如何删除它。
  • @Vinu 对不起,我错过了第一个工作模式后面的逗号。我更新了我的答案
猜你喜欢
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多