[英]search text in array using regex in javascript
我对在数组中制作搜索文本非常陌生,数组中的一些元素在游侠中,即在这个 AA 和 A 正则表达式中的某些文本之后它不能是任何东西,我有多维数组,我想要在每个数组中搜索文本。 所以我写了这样的东西。我把 AA* 放在数组中,所以只有前 2 个字符应该匹配,A* 只匹配一个字符。
arr = [
["AA*","ABC","XYZ"] ,
["A*","AXY","AAJ"]
]
var text = "AA3";
for ($i=0; $i<arr.length; $i++ ){
var new_array = [];
new_array = arr[$i];
new_array.filter(function(array_element) {
var result = new RegExp(array_element).test(text);
if( result == true){
console.log(arr[$i]);
}
});
}
所以我想要的是当text = "AA3"或 double A AA[anything]之后的任何内容和 output 应该是第一个数组,即 ["AA*","ABC","XYZ"] 但我得到两个数组output 并且当text = "A3"时 output 应该是第二个数组,即 ["A*","POI","LKJ"] 但我得到了两个数组。但是如果text = "ABC"或text = "AAJ"那么它应该分别是 output 第一个数组或第二个数组。我对如何编写正则表达式一无所知,或者无论如何我可以使用任何其他方法来实现它。 在此先感谢任何建议都会有所帮助。
简而言之,问题是“*”。 在 set 数组的成员中找到的 * 是您每次获得相同数组的原因
正则表达式是大多数开发人员难以理解的一个概念(顺便说一句,我就是其中之一😅)。
我将从MDN 上 Regexp的摘录介绍开始
正则表达式是用于匹配字符串中的字符组合的模式 - MDN
考虑到这一点,您想了解您的代码发生了什么。 当您创建像/A*/
这样的正则表达式来测试"AA3"
时,匹配的将是A
、 AA
等。这是 javascript 中的一个真理。 您可能希望与^
或$
进行更严格的匹配,或者将数字与\d
严格匹配。
我将您的代码重写为下面的 function:
arr = [
["AA*", "ABC", "XYZ"],
["A*", "AXY", "AAJ"],
];
findInArray(arr, "AA3") // prints both array
findInArray(arr, "AAJ") // prints second array
findInArray(arr, "ABC") // prints first array
function findInArray(array, value) {
return array.filter((subArray) =>
subArray.some((item) => {
const check = new RegExp(value);
return check.test(item);
})
);
}
问题在于您将每个字符串用作正则表达式。
*
通配符的字符串,这将计算为前一项的零个或多个匹配项,这将始终为true
。true
。假设:
*
通配符的值始终仅位于第0
个position,text = 'AAJ'
AAJ
应返回第二个数组,但来自第一个数组的AA*
和来自第二个数组的AAJ似乎都与此text
匹配。代码:
const abc = (arrs, text) => { return arrs.filter(arr => { const regex = new RegExp(`^${arr[0].replace('*', '\\d+')}$`); return regex.test(text) || arr.includes(text); }) } const arr = [ ["AA*", "ABC", "XYZ"], ["A*", "AXY", "AAJ"] ]; console.log( `1=[${abc(arr, "AA3")}] 2=[${abc(arr, "ABC")}] 3=[${abc(arr, "AAJ")}]`);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.