var myArr=["test1.nameA", "test1.nameB", "test2.nameC", "test2.nameA"];
我希望得到以“test1”开头的字符串。
我尝试了以下内容:
1)你能不能让我知道为什么我仍然得到阵列中的所有字符串?
for (var i = 0; i < myArr.length; i++) {
if ((myArr[i]).search(new RegExp("test1") != -1)) {
console.log(myArr[i]);
}
}
但这一回归所有元素!我究竟做错了什么?
2)还可以检查它是否仅以“test1”开头而不仅仅包含!
更新了问题:
myArr=["test1.nameA", "test1.nameB", "test2.nameC", "test2.nameA"];
var input="test1";
for (var i = 0; i < myArr.length; i++) {
if(myArr[i].search( new RegExp (/input/)) != -1) {
console.log(myArr[i]);
}
}
谢谢!如果您需要更多说明,请与我们联系
答案 0 :(得分:1)
您只能使用Array.prototype.filter
保留与正则表达式匹配的值,如下所示:
myArr.filter(function (i) { return /^test1\./.test(i); })
要检查某些内容是否以字符串开头,请使用/^string/
。请注意^
答案 1 :(得分:0)
您可以根据相同的RegExp测试值。
var myArr=["test1.nameA", "test1.nameB", "test2.nameC", "test2.nameA"];
var pattern = /^test1\./; // begins with test1 followed by a dot
for(var i = 0; i < myArr.length; i++) {
if(pattern.test(myArr[i])) {
console.log(myArr[i]);
}
}
答案 2 :(得分:0)
您正在测试new RegExp("test1")
if ((myArr[i]).search(new RegExp("test1") != -1)) {
^^^^^^^^^^^^^^^^^^^^^^^^^
并且new RegExp("test1")
永远不会等于-1
,这意味着您的测试始终是真的。
这就是你需要的:
var myArr=["test1.nameA", "test1.nameB", "test2.nameC", "test2.nameA"];
for (var i = 0; i < myArr.length; i++) {
if ((myArr[i]).search(new RegExp("test1")) != -1) {
console.log(myArr[i]);
}
}
或者更好的是,为了避免每次循环创建一个新的RegExp:
var myArr=["test1.nameA", "test1.nameB", "test2.nameC", "test2.nameA"];
var rex = new RegExp("test1");
for (var i = 0; i < myArr.length; i++) {
if ((myArr[i]).search(rex) != -1) {
console.log(myArr[i]);
}
}
此外,.search()
返回在字符串中找到表达式的位置,如果未找到则返回-1。因此当它返回零时,这意味着它在开始时被发现。