javascript - 将字符串与数组匹配

标签 javascript html arrays vue.js

我有一个这样的数组...

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/

相关文章:

javascript - extjs 4 网格渲染器

html - 列表中的 anchor 链接确实跨越整个列表

Javascript 将鼠标悬停在 PNG 图像的可见部分上

c++ - 用随机值填充我的数组 C++

javascript - 从平面结构和反向制作嵌套对象结构?

javascript - 无法根据特定意图在谷歌助手内联中添加建议芯片

javascript - 图像的宽度和高度取决于它的方向

html - 什么是 HTML 中的类?

java - 使用 JSON 参数从 PHP 调用 Java

javascript - 在每次迭代中循环 'n' 组中的元素