6

我有一个字符串,一个要搜索的单词数组:

strng = "I have been working here since last six months"
text = ["since", "till", "until"]
result = "since"

我想搜索数组中的每个单词,在strng字符串中找到任何单词时,必须将其分配给结果。怎么做?
我正在使用.search()搜索单个单词,但是如何搜索多个单词?请帮忙。
我是新手。

4

5 回答 5

11

您可以遍历关键字数组或使用正则表达式。前者简单,后者更优雅;-)

您的正则表达式应该类似于“/since|till|until/”,但我现在还不能 100% 确定。如果您打算使用正则表达式,您应该研究一下它们,这是一个入门:http ://www.w3schools.com/js/js_obj_regexp.asp

编辑:刚刚尝试过并刷新了我的记忆。最简单的解决方案是使用 .match(),而不是 search()。它归结为一个单行然后:

strng.match(/since|till|until/) // returns ["since"]

使用 .match() 为您提供了一个包含所有模式出现的数组,在这种情况下,第一个也是唯一的匹配是该数组的第一个元素。

于 2013-05-31T06:37:53.957 回答
3

我认为正则表达式是解决这个问题的简单方法。使用 match() 而不是 search()。

如果你把它写成,

strng = "I have been working here since last six months"
text = /(since)|(till)|(here)/
result= strng.match(text); // result will have an array [since,since,]

正确的解决方案是写,

result=strng.match(text)[0];
于 2013-07-22T09:32:28.923 回答
1

text您可以像.search()这样遍历每个项目

for (var i=0; i < text.length; i++)
{
   if (-1 != strng.search(text[i]))
   {
      result = text[i];
      break;
   }
}
于 2013-05-31T06:43:13.883 回答
0

像这样做...

strng = "I have been working here since last six months";
text = ["since", "till", "until"];
results = [];   // make result as object

     for(var i=0; i<=text.length; i++){
          if(strng.indexOf(text[i]) != -1)
             results.push(text[i]);
     }

要使 indexOf 在 IE 中工作,请将此代码放入您的脚本中

if (!Array.prototype.indexOf) {

    Array.prototype.indexOf = function(obj, start) {
         for (var i = (start || 0), j = this.length; i < j; i++) {
             if (this[i] === obj) { return i; }
         }
         return -1;
    };

}
于 2013-05-31T07:11:39.820 回答
0

你可以这样做:

var result;
for(var x = 0; x < text.length; x++){
    if(strng.indexOf(text[x]) > -1){
        result = text[x];
        break;
    }
}
alert(result);

这里的工作示例:http: //jsfiddle.net/j5Y5d/1/

于 2013-05-31T06:43:48.473 回答