Не ищется слово в тексте :(
Всем привет. Подскажите пожалуйста, где ошибка. Что бы я не писал в скобках после RegExp все бестолку, ничего не находится :( Даже любую букву не ищет. А нужно взять каждый элемент из массива arr и просто проверить есть ли такое же слово в предложении.
<script> function poisk (){ var str = 'Однажды вечером Вадим увидел у горизонта яркий свет' var arr = ["Вадим", "пробел", "вечером", "земля"] for(i=0; i<arr.length; i++){ var re = new RegExp(arr[i]) var str2 = str.indexOf(re) alert(str2) } } </script> <body> <div style="border:1px solid blue; position:absolute; cursor:pointer" onclick="poisk()">onclick="poisk()</div> |
фонарик,
строка нужна а не RegExp (function poisk (){ var str = 'Однажды вечером Вадим увидел у горизонта яркий свет' var arr = ["Вадим", "пробел", "вечером", "земля"] for(i=0; i<arr.length; i++){ var str2 = str.indexOf(arr[i]) alert(str2) } })() |
рони,
я здесь сильно упростил задачу, на самом деле у меня в длинном регулярном выражении еще должна присутствовать переменная. Вне цикла for поиск находит что нужно, а вот в этом случае - никак нет. |
фонарик,
где код? |
вот кусочек кода. По сути у меня есть большой кусок текста со значениями и словами. По типу идентификатор и куча свойств и его значений. В этом большом куске кода такие идентификаторы идут следом один за другим. Я же беру из массива идентификатор и из общего большого куска текста в котором они идут друг за другом - выделяю только тот кусок, который соответствует этому идентификатору. Затем мне в этом отдельном куске нужно проверить, есть ли там определенное свойство. Вот както так :-?
function sortingItemsByType(u){ var choise = u.options[u.selectedIndex].value;//получаем номер выбранного элемента в списке var arr = document.getElementById('results_area').value.split(', ')//делаем массив из текста нижнего поля, его элементы будем искать в блоке текста for(i=0; i<arr.length; i++){ var string = document.getElementById('itemKinds_txt').value;//большой блок текста var re = new RegExp('\\[ "' + arr[i] + '[^\n]*') var str = string.match(re)//получаем конкретный блок текста из большого, содержащий искомый предмет var valid = str.indexOf(itp_type_[choise]);//есть ли в этом отдельном куске свойство? alert(valid) } И вот в 10й строке почему-то всегда получается что такого свойства нет хотя оно там есть. Да и вообще никакой символ не находит, не говоря уж о значении. |
фонарик,
может так ? var re = new RegExp(arr[i] + '[^\\n]*'); |
рони,
Регулярное выражение тут совсем ни причем. В 8 строке у меня в переменной str если ее вывести в алерт - кусок текста содержащий идентификатор с его свойствами и значениями. Т.е регулярное выражение выделило нужный блок текста корректно. А вот в 10й строке при попытке найти что-либо в этой переменной - ничего не получается. Вот в чем проблема. Не ищет ни значения ни даже простой любой символ. |
фонарик,
itp_type_[choise] это что или нужно догадатся? недостаточно информации делайте макет иначе всё это гадание. |
рони,
я же написал, что не ищется не то чтобы это значение, а вообще ничего. Т.е если вместо этого написать var valid = str.indexOf('a') то все равно ничего не изменится. Переменная valid будет всегда -1, т.е даже букву "a" не найдет в этом тексте, а уж она там точно есть. |
фонарик,
непишите ерунды str у вас скорее всего null при таком RegExp -- код где ????? |
фонарик, а ничего, что твоя str нифига не строка, а массив?
Смотри доку по функции String.prototype.match() |
indexOf ищет теперь и в массивах (как будто когда не искал то не искал в массивах типа string)
Однако серьезность автора темы рушится в моих глазах под строчками for(i=0; i<arr.length; i++){ var string = document.getElementById('itemKinds_txt').value; За каким членом-корреспондетом искать каждый раз один и тот же элемент, брать валуе и ничего со string не делать. И конечно надо знать что в str будет массив чтобы правильно пользоваться поиском в этом массиве. |
рони,
Я старался как можно точнее описать проблему, но видимо плохо старался. Однако ерунды я не писал, и в переменной str у меня совсем не null как вы предполагаете, а, как я уже писал ранее - команда алерт выводит в ней правильный кусок текста (много буковок). danik.js, Я не знаю как вы это делаете, но вы совершенно точно указали на ошибку, большое вам спасибо :) kostyanet, Я не понимаю почему вы акцентрируете внимание на серьезности автора темы, когда как предмет данного топика состоит совсем в другом. У меня нет математического образования и уж в особенности - в программировании. Что такое html и javascript я знаю в общей сложности не более 3-5 месяцев. Я нуб и ламер, если вам стало легче :) Однако вы совсем не увидели что с переменной string работает регулярное выражение, а говорите что ничего с ней не делается. И да, вы верно подметили что может быть и не совсем логично в цикле каждый раз считывать не изменяющееся значение. Спасибо вам за замечание. В итоге, после поправок господина danik.js в строку: var str2 = str[0].indexOf(re) - все заработало правильно: function sortingItemsByType(u){ var choise = u.options[u.selectedIndex].value;//получаем номер выбранного элемента в списке var arr = document.getElementById('results_area').value.split(', ')//делаем массив из текста нижнего поля, его элементы будем искать в блоке текста for(i=0; i<arr.length; i++){ var string = document.getElementById('itemKinds_txt').value;//большой блок текста var re = new RegExp('\\[ "' + arr[i] + '[^\n]*') var str = string.match(re)//получаем конкретный блок текста из большого, содержащий искомый предмет var valid = str[0].indexOf(itp_type_[choise]);//есть ли в этом отдельном куске свойство? alert(valid) } |
Часовой пояс GMT +3, время: 11:38. |