我在变量中有一个字符串--一个,它包含像字符串格式的变量一样的数组解析,例如,我想得到所有由[和]限制的索引
var a = 'info.name[0][1][5].data[0]',
collect = [];
a.split(']').reverse().forEach(function(a) {
if (a.indexOf('[') !== -1) {
var splits = a.split('[');
collect.push(splits[splits.length - 1])
}
})
console.log(collect);
我上面显示的代码很好用,我知道它有时会失败,所以如果可能的话,我正在寻找更好的程序,请帮助我用正则表达式来解决这个问题。
**Please Dont Use Jquery or any other libs to solve this problem **发布于 2019-01-19 09:01:09
您可以使用match方法:
const a = 'info.name[0][1][5].data[0]';
const collect = a.match(/[^[]+?(?=\])/g) || [];
console.log(collect);
正则表达式包括:
[^[]+?:捕获一个或多个不是[的字符。当满足下一个条件时,?使捕获停止:(?=\]):要求下一个字符是],但不要捕获它。g修饰符将确保返回所有匹配。
如果根本没有匹配项,则添加|| []。在这种情况下,match返回null。这个添加将输出一个空数组,而不是那个null,这可能更实用。
注意:我不知道你为什么使用reverse,但是如果你真的需要倒序输出数组,你当然可以将reverse应用于它。
发布于 2019-01-19 08:56:58
匹配[,使用负字符集([^\]]+)捕获除]以外的任何内容,然后匹配]。然后,您可以提取每个捕获的组,它将包含[]s之间匹配的子字符串:
const a = 'info.name[0][1][5].data[0]';
const collect = [];
const re = /\[([^\]]+)\]/g;
let match;
while (match = re.exec(a)) {
collect.push(match[1]);
}
collect.reverse();
console.log(collect);
发布于 2019-01-19 09:14:10
您可以在match:/\b\d+\b/g中使用此正则表达式。
它匹配任何非字母数字值(如和)之间的数字。
const a = 'info.name[0][1][5].data[10]';
const result = a.match(/\b\d+\b/g) || [];
console.log(result);
https://stackoverflow.com/questions/54265492
复制相似问题