我的数组中有以下项目:
var mystring;
var myname = "Level 1-1";
var myarray = [
"My Level 1-11 Ticket",
"My Level 1-1 Ticket",
"My Level 10-1 Ticket",
"My Level 10-11 Ticket"
];
for (var i = 0; i <= myarray.Count - 1; i++) {
if (myname == ) {
mystring = myarray[i];
break;
}
}
现在,我想知道数组中是否有包含字符串“Level 1-1”的项目。但是我只想返回正好包含“Level 1-1”的字符串,我不想返回类似“Level 1-11”这样的字符串。
myarray 中的字符串将只有以下值:Level 1-1、Level 1-2、Level 1-10、Level 1-11、Level 10-1、Level 10-11。
myarray 中的字符串永远不会有这样的值:Level 1、Level 1-、Level -1、Level -1-1。
我怎样才能只返回正好包含“Level 1-1”的myarray项?
答案 0 :(得分:1)
您可以为此使用正则表达式,
let arr = ["My Level 1-11 Ticket",
"My Level 1-1 Ticket",
"My Level 10-1 Ticket",
"My Level 10-11 Ticket"];
let inputStr = "Level 1-1";
let result = arr.find(e => e.match(RegExp(`\\b${inputStr}\\b`)));
console.log(result);
或者如果你的字符串可以出现在开头或结尾或中间,你可以使用这个
let arr = ["My Level 1-11 Ticket",
"My Level 1-1 Ticket",
"My Level 10-1 Ticket",
"My Level 10-11 Ticket",
"Level 11-11 Ticket",
"My Level 12-11"];
let inputStr = "Level 11-11";
let result = arr.find(e => e.match(RegExp(`([^\\w]|^)${inputStr}([^\\w]|$)`)));
console.log(result);
答案 1 :(得分:0)
在这种情况下使用正则表达式会更有用。
<块引用>在正则表达式中,^
用于匹配开始,$
用于匹配结束,\s
用于匹配空格(换行符,制表符,空格)等)。
function getTheExactStrings(myarray, myname) {
// Write a regular expression as per your need to match the substrings
const regex = new RegExp(`.*(\\s+|^)${myname}(\\s+|$).*`);
// Iterate over array items and try to return true/false using `test() method`
return myarray.filter((name) => {
return regex.test(name);
});
}
// start
var mystring;
var myname = "Level 1-1";
var myarray = [
"My Level 1-11 Ticket",
"My Level 1-1 Ticket",
"My Level 10-1 Ticket",
"My Level 10-11 Ticket",
];
// Call the function to get result
console.log(getTheExactStrings(myarray, myname)); // [ 'My Level 1-1 Ticket' ]
我认为,这应该可以解决您的问题。您可以对上述代码进行更改以满足您的需要。我建议你写一个函数,可以用不同的不同数组来测试它。
如果您想了解 Javascript 的正则表达式,请查看以下文档。