2013-05-31 2 views
2

я строка, массив слов, которые нужно искать:Как искать несколько текстов в строке, используя java-скрипт?

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

Я хочу, чтобы искать каждое слово в массиве, в strng и когда какой-либо из него находится в strng, он должен быть назначен в результате. как это сделать?
Я использую .search() для поиска одного слова, но как искать несколько слов? пожалуйста помоги.
Я новичок.

ответ

3

Вы можете либо перебрать свой массив ключевых слов, либо использовать регулярное выражение. Первое простое, последнее более элегантно ;-)

Ваше регулярное выражение должно быть чем-то вроде «/ с | до | до /», но я не уверен на 100% прямо сейчас. Вы должны немного исследовать регулярные выражения, если вы планируете их использовать, вот стартер: http://www.w3schools.com/js/js_obj_regexp.asp

EDIT: Просто попробовал и обновил свою память. Самое простое решение - использовать .match(), а не search(). Это сводится к однострочнику затем:

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

Использование .match() дает массив со всеми вхождениями вашей модели, в этом случае первый и единственный матчем является первым элементом этого массива.

1

Вы можете цикл по каждому элементу в text с .search() как этот

for (var i=0; i < text.length; i++) 
{ 
    if (-1 != strng.search(text[i])) 
    { 
     result = text[i]; 
     break; 
    } 
} 
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/

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

} 
1

Я думаю, что регулярное выражение простое решение для этого. Используйте match() вместо поиска().

если вы пишете как,

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]; 
Смежные вопросы