【发布时间】:2019-06-29 22:56:33
【问题描述】:
鉴于此(注意捕获组):
/^\w+\[\w+\]\[\w+\]\[(\d+)\]\[\w+\]\[(\d+)\]\[\w+\]$/
我想要这个(注意捕获组已经倒置):
/^(\w+\[\w+\]\[\w+\]\[)\d+(\]\[\w+\]\[)\d+(\]\[\w+\])$/
我的尝试:
str = /^\w+\[\w+\]\[\w+\]\[(\d+)\]\[\w+\]\[(\d+)\]\[\w+\]$/.toString()
noncaptured = [];
captured = [];
insideCapture = false;
for (var i = 0, position = 1; i < str.length; i++) {
if( str.charAt(i) != '(' && insideCapture == false ){
noncaptured.push([position, str.charAt(i) ] );
} else {
if( str.charAt(i) != '(' ){
position += 1;
}
captured.push([position, str.charAt(i) ]);
insideCapture = true;
if( str.charAt(i) == ')' ){
captured.push([position, str.charAt(i)]);
insideCapture = false;
position += 1;
}
}
}
var arr = captured.concat(insideCapture);
arr.sort(function(){
if (a[0] === b[0]) {
return 0;
}
else {
return (a[0] < b[0]) ? -1 : 1;
}
})
我正在寻找一个干净的算法。欢迎使用 ES6 解决方案。
【问题讨论】:
-
所以你本质上是想简化代码?
-
@JackBashford 好吧,它并不完全适合一个人。二是丑。
-
什么不起作用?
-
@cegfault 好吧,我使用位置值对项目进行了分组。然后将他们联合起来。现在我需要根据这些值构建一个新的正则表达式。
-
干净的解决方案取决于几件事。为什么要这样做?
标签: javascript arrays regex algorithm ecmascript-6