我有一个要求,我可以有多个输入字符串。我需要将它们全部转换为单一格式。 例如。
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
如果可能,我希望只有一个正则表达式。
答案 0 :(得分:3)
您可以使用:
(\w\w)(?!\r?$)\W?
并使用\1,
作为替代。
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的答案。
您最好使用您所用语言的字符串操作工具,例如:
单独用正则表达式得到的最接近的如下(注意额外的尾随逗号):
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