2015-04-19 2 views
1

У меня возникла небольшая проблема, когда я хочу проверить, существует ли слово с одного входа, в другом вводе.Проверьте, существует ли слово с одного входа в другом

Первый вход может содержать только одно слово. Когда я набрал слово, а затем ударил пробел, скрипт должен проверить, существует ли слово во втором вводе. Он отлично работает, за исключением случаев, когда я использую + -sign.

Если во втором входе есть c++, и я набираю c в первом входе, а затем ударяю пробел, это говорит о том, что слово уже существует, что неверно.

Я попытался найти в Интернете решение, и то, что я нашел, было чем-то с regEx и escaping, но оно все еще не работает.

Это то, что я пытался до сих пор:

$word = $('input.word').val(); 
$check_here = $('input.check-here').val(); 

function escapeRegExp(string) { 
    $regex = '\\b'; 
    $regex += string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); 
    $regex += '\\b'; 
    $result = new RegExp($regex, "g"); 
    return $result; 
} 

if (escapeRegExp($word).test($check_here)) { 
    alert("Word exist"); 
} 
else { 
    alert("Word do not exist"); 
} 

Live Fiddle

PS: Я также попытался поставить $check_here в функции escapeRegExp(), как я сделал с $word, но это не работает вообще.

Дружелюбный человек, который может сообщить мне, что случилось?

+1

@ ответ Гаэля в поле ниже путь вы должны делать это. Что касается того, почему ваш текущий код не работает - это потому, что \ b в конце созданного вами регулярного выражения фактически соответствует первому + в «C++» в качестве границы слова. Это связано с тем, что a + не считается символом, который обычно появляется в словах - следовательно, он не является «символом слова» и поэтому должен быть символом границы слова. Если вы действительно хотите использовать этот подход вместо приведенного ниже, попробуйте использовать (?! \ W) вместо \ b в конце вашего регулярного выражения. –

ответ

2

Я не понимаю, почему вы хотите избежать строки.

Ваша функция escapeRegExp (которая не уходит больше, так что теперь называется РегВыр) должно быть простым, как это:

function regExp(string) { 
    //this regex will match only if there is the same string in your list. 
    //Only spaces are used as boundaries. 
    return new RegExp("\s"+string+"\s", "g"); 
} 

В качестве альтернативы, вы можете поместить все слова во втором входе в массиве, как в моей скрипке:

var existingWords = $('input#wordList').val().split(/ /); 
    if(existingWords.indexOf(word) >= 0) 

http://jsfiddle.net/gael/a2tr9tud/1/

+0

Спасибо. indexOf, кажется, работает идеально, для этого :) – TheYaXxE

+0

Если я хочу удалить слово из ввода, как это сделать? :) Я пробовал с заменой(), но удаляет каждый экземпляр этого символа – TheYaXxE

+0

$ ('input # check-word'). HTML ("") – Gael

Смежные вопросы