我有一个这样的数组...
var array = ['aaa', 'bb', 'ccc', 'dddd', 'eee', 'fff'];
此外,我有一个这样的字符串:
5000aaa
或者像这样...
50bb
该字符串会有所不同,我需要将该匹配部分 (aaa
) 放入一个变量中并将其从现有字符串中删除。
最终的结果应该是这样的:
var array = ['aaa', 'bb', 'ccc', 'dddd', 'eee', 'fff'];
var oldString = '5000aaa';
var matchedPart = 'aaa';
var newString = '5000';
问题是匹配的长度是变化的,并且字符串是动态的(从输入的值中获取)但是,每次匹配的部分只包含在最后。
我不知道如何使用纯 Javascript 或 ES2015 或 VueJS 来做到这一点。谁能指导我?
最佳答案
一种方法是使用带有替换 和捕获组的正则表达式,如下所示:
var regex = new RegExp("(\\d+)(" + array.join("|") + ")");
|
定义了一系列备选方案,其中任何一个都允许匹配。例如:
var array = ['aaa', 'bb', 'ccc', 'dddd', 'eee', 'fff'];
var regex = new RegExp("(\\d+)(" + array.join("|") + ")");
var str = "500bb";
var match = regex.exec(str);
console.log(match[1]); // 1st capture group: "500"
console.log(match[2]); // 2nd capture group: "bb"
注意:如果数组中的文本可以包含任何在正则表达式中具有特殊含义的字符(如 |
或 ?
或 .
),在将它们传递给 RegExp
构造函数时,您需要对它们进行转义。在 this question's answers 中有多种方法可以做到这一点.你可以像这样将它应用到上面:
var regex = new RegExp("(\\d+)(" + array.map(function(entry) {
return rexEscape(entry);
}).join("|") + ")");
...其中 rexEscape
是您最终定义和使用的转义函数。
关于javascript - 将字符串与数组匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54853403/