我正在尝试处理类似于以下内容的输入组:'...A.B.'
并想输出'.....AB'
。
另一个例子:'.C..Z..B.' ==> '......CZB'
我一直在与以下工作:
'...A.B.'.replace(/(\.*)([A-Z]*)/g, "$1")
返回:
"....."
和
'...A.B.'.replace(/(\.*)([A-Z]*)/g, "$2")
返回:
"AB"
但
'...A.B.'.replace(/(\.*)([A-Z]*)/g, "$1$2")
退货
"...A.B."
有没有办法退货
"....AB"
与一个正则表达式?
我只能通过以下方式完成此操作:
'...A.B.'.replace(/(\.*)([A-Z]*)/g, "$1") + '...A.B.'.replace(/(\.*)([A-Z]*)/g, "$2")
==>
".....AB"
最佳答案
如果目标是将所有.
移至开头并将所有A-Z
移至结尾,那么我相信答案是
没有。”
另外,我认为没有比两个replace
调用更简单,更有效的方法了-但是您所展示的两个没有。代替:
var str = "...A..B...C.";
var result = str.replace(/[A-Z]/g, "") + str.replace(/\./g, "");
console.log(result);
(我不知道您想对non-
.
和non- A-Z
字符做什么,所以我忽略了它们。)如果您确实想通过单次调用
replace
来做到这一点(例如,单次传递字符串很重要),就可以,但是我很确定您必须使用函数回调和状态变量:var str = "...A..B...C.";
var dots = "";
var nondots = "";
var result = str.replace(/\.|[A-Z]|$/g, function(m) {
if (!m) {
// Matched the end of input; return the
// strings we've been building up
return dots + nondots;
}
// Matched a dot or letter, add to relevant
// string and return nothing
if (m === ".") {
dots += m;
} else {
nondots += m;
}
return "";
});
console.log(result);
那当然是令人难以置信的丑陋。 :-)
关于javascript - 将捕获组合并到单个正则表达式中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44997143/