使用正则表达式拆分字符串但在匹配数组中保留分隔符

只是找不到这个答案。 这是一个示例字符串:

"some@domain.com" 

我想生成一个像这样的匹配数组:

 ["some", "@", "domain", ".", "com"] 

我一直在使用以下正则表达式来分割字符串:

 "([@\\.])" 

但是,结果如下:

 ["some", "domain", "com"] 

相同的正则表达式适用于Javascript和C#,但不适用于Java。 谁知道这个正确的正则表达式?

你可以这样做:

 "some@domain.com".split("(?=[@.])|(?<=[@.])"); 

这使用环视在分隔符之前或之后拆分空字符串

同样,如果您希望将分隔符附加到前一个元素,则可以使用look-behind 。 如果您希望将分隔符预先添加到下一个元素,则可以使用前瞻 。 上述正则表达式是这两种情况的组合,因此将分隔符保持为单独的元素。

 "some@domain.com".split("(?=[@.])"); // ["some", "@domain", ".com"] "some@domain.com".split("(?<=[@.])"); // ["some@", "domain.", "com"]