在javascript中使用regexp来获取以特定字符串开头的数组的所有字段

时间:2014-12-01 02:33:21

标签: javascript regex

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]); 
} 
}

谢谢!如果您需要更多说明,请与我们联系

3 个答案:

答案 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]);
  }
}

工作示例:http://jsbin.com/qilinohora/1/edit?js,console

答案 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。因此当它返回零时,这意味着它在开始时被发现。