自定义正则表达式,用于检查,添加或替换逗号

时间:2018-05-10 11:27:28

标签: regex

我有一个要求,我可以有多个输入字符串。我需要将它们全部转换为单一格式。 例如。

ABCDEF -> AB,CD,EF
ABCD -> AB,CD
ABCDE -> AB,CD,E
AB CD EF -> AB,CD,EF
AB CD -> AB,CD
AB CD E -> AB,CD,E
AB,CD,EF -> AB,CD,EF
AB,CD,E -> AB,CD,E

如果可能,我希望只有一个正则表达式。

2 个答案:

答案 0 :(得分:3)

您可以使用:

(\w\w)(?!\r?$)\W?

并使用\1,作为替代。

Live demo

JS代码:



var re = /(\w\w)(?!\r?$)\W?/g;
var str = ['ABCDEFDF', 'ABCD', 'ABCDE', 'AB CD EF', 'AB CD', 'AB CD E', 'AB,CD,EF', 'AB,CD,E'];

str.forEach(function(s) {
  console.log(s + " => " + s.replace(re, '$1,'))
})




这会捕获两个单词字符并匹配可选的非单词字符,而不是CR / LF。

故障:

  • (\w\w)捕获两个单词字符
  • (?!开始否定前瞻
    • \r?$匹配可选的CR和行尾
  • )前瞻结束
  • \W?匹配可选的非单词字符

答案 1 :(得分:1)

我认为单靠正则表达式无法做到这一点...请参阅@ revo的答案。

您最好使用您所用语言的字符串操作工具,例如:

  1. 删除空格和逗号
  2. 分成2个字符的块
  3. 在块之间插入逗号
  4. 单独用正则表达式得到的最接近的如下(注意额外的尾随逗号):

    https://regex101.com/r/VJ4sh3/1

    输出:

    AB,CD,EF
    AB,CD,
    AB,CD,E
    AB,CD,EF
    AB,CD,
    AB,CD,E
    AB,CD,EF
    AB,CD,E