JavaScript 正则表达式 : How to split Regex subexpression matches in to multi-dimensional string arrays?

标签 javascript regex

如何将 Regex 子表达式匹配拆分为多维字符串数组?

我有一个“myvar”字符串:

1-4:2;5-9:1.89;10-24:1.79;25-99:1.69;100-149:1.59;150-199:1.49;200-249:1.39;250+ :1.29

这是 QuantityLow - QuantityHigh : PriceEach 的重复;

我使用了这个“myreg”正则表达式 /(\d+)[-+](\d*):(\d+\.?\d*);?/g

var myarray = myvar.match(myreg);

一起使用

生产的:

myarray[0] = "1-4:2;"
myarray[1] = "5-9:1.89;"
myarray[2] = "10-24:1.79;"
myarray[3] = "25-99:1.69;"
myarray[4] = "100-149:1.59;"
myarray[5] = "150-199:1.49;"
myarray[6] = "200-249:1.39;"
myarray[7] = "250+:1.29"

太棒了!除了我需要如上所述 Q1 - Q2 : P 进一步打破字符串。正则表达式已设置为识别带括号的部分。我认为这可以通过一个或至少两个 Regex 表达式来完成,而不是设置某种循环。

感谢您的反馈。

最佳答案

您没有说出您期望的确切输出,但我想像这样的输出可能是直观的。

给定:

var myvar = "1-4:2;5-9:1.89;10-24:1.79;25-99:1.69;100-149:1.59;150-199:1.49;200-249:1.39;250+:1.29";

捕获所有子匹配的快速方法是:

var matches = [];
myvar.replace(/(\d+)[-+](\d*):(\d+\.?\d*);?/g, function(m, a, b, c) {
    matches.push([a, b, c])
});

(注意:您可以使用 [可能更具可读性] 循环捕获相同的输出):

var myreg = /(\d+)[-+](\d*):(\d+\.?\d*);?/g;
var matches = [];
while(myreg.exec(myvar)) {
    matches.push([RegExp.$1, RegExp.$2, RegExp.$3])
}

无论哪种方式,结果都是匹配数组:

matches[0]; // ["1", "4", "2"]
matches[1]; // ["5", "9", "1.89"]
matches[2]; // ["10", "24", "1.79"]
matches[3]; // ["25", "99", "1.69"]
matches[4]; // ["100", "149", "1.59"]
matches[5]; // ["150", "199", "1.49"]
matches[6]; // ["200", "249", "1.39"]
matches[7]; // ["250", "", "1.29"]

关于JavaScript 正则表达式 : How to split Regex subexpression matches in to multi-dimensional string arrays?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570066/

相关文章:

regex - 使用 MARPA::R2 perl 解析双引号字符串

javascript - 有没有办法使用 jQuery 选择器来获取与 document.documentElement.outerHTML 返回的字符串相同的字符串?

php - JQuery.ajax() 方法未执行

regex - Sublime Text 中的正则表达式替换

regex - 正则表达式/^\s*$/有什么作用?

带有条件模板的 iOS NSRegularExpression

Python 正则表达式插入符号在多行模式下不起作用?

javascript - 从 jQuery 下拉列表中访问变量

javascript - 通过了解对象的值来检索对象的键

javascript - 如何在 Vue.js 中将属性范围限定为自定义指令?