у меня есть этот код:Javascript регулярного выражения не работает должным образом
<!DOCTYPE html>
<html>
<head>
<script>
words = ["hi2", "say3", "you1", "me1"],
regex1 = /[\S]{2,3}[1|2|3]/g,
window.word_text = function(){
var data = document.getElementById("input").value.split(" ")
for (i = 0; i < data.length; i++){
for (j = 0; j < words.length; j++){
if (regex1.exec(data[i]) == words[j]){
console.log("match");
}
else{
console.log("no match")
}
}
}
}
</script>
</head>
<body>
<input id="input" type="text" onblur="word_text()">
</body>
</html>
Когда данные [я] хороший матч («hi2») инструкция не всегда выполняется так, как представляется, проблема с моим регулярным выражением , Обратите внимание, что он отлично работает без g (несколько совпадений), но мне это нужно, потому что в выражении if «hi2» будет заменен массивом вещами с двумя или тремя буквами, за которыми следуют 1, 2 или 3. Поэтому мне нужны мои данные [i], чтобы распознать «hi2say1» для соответствия «hi2» и «say1».
Большое вам спасибо за помощь!
'exec' возвращает массив или нуль. Но ваша цель очень неясна. Можете ли вы построить фрагмент с определенным кодом и точно указать желаемый результат? См. Http://stackoverflow.com/help/mcve –
Что такое 'data [i]'? Почему вы сравниваете строку с массивом? – GingerPlusPlus
Видя, что '/ g' вызывает проблему, и вы говорите * не всегда *, кажется, что у вас возникают проблемы с тем, как' exec' обрабатывает последовательные совпадения. Обратите внимание, что 'regex1.exec' не будет давать одинаковый результат каждый раз при последовательных вызовах с одним и тем же вводом, если выражение имеет глобальный флаг. Трудно, однако, дать хороший ответ на то, что вы должны делать, от того, как формулируется ваш вопрос. [См. Раздел о последующих совпадениях здесь] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec) –