Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка на JS для поиска предложений, содержащих слово (https://javascript.ru/forum/misc/64642-regulyarka-na-js-dlya-poiska-predlozhenijj-soderzhashhikh-slovo.html)

dev.div0 26.08.2016 16:03

Регулярка на JS для поиска предложений, содержащих слово
 
Здравствуйте.
Подскажите регулярку для поиска предложений в русском тексте по определенному слову.
Считаю что предложение это часть текста начинающееся с большой буквы и заканчивающееся точкой. Варианты сокращений типа "и т.д." или вообще сокращения пока что не учитываю.
Впрочем, возможно у кого-то в копилке есть вариант и с обработкой сокращений.
Прошу помочь.

ksa 26.08.2016 16:51

Цитата:

Сообщение от dev.div0
Подскажите регулярку для поиска предложений в русском тексте по определенному слову.

Разбей текст на "предложения", используя точку как разделитель. А потом в цикле проверяй, какое "предложение" содержит исходное слово...

dev.div0 26.08.2016 17:33

плохо это - 3 действия получается. Так-то у меня и работает (как предложил ksa). Хотелось бы регуляркой.

Rise 26.08.2016 17:36

dev.div0, а слово как считаешь?

dev.div0 26.08.2016 17:42

есть текст. Получаю массив предложений через текст.split('.') потом в цикле пробегаюсь по каждому из предложений
function findSentence(){
        var selectedSentence;
        var sentenceIndex = -1;
        for(var i=0;i<sentences.length;i++){
            var sentence = sentences[i];
            var wordExists = sentence.indexOf(currentWord) > 0;
            if(wordExists){
                selectedSentence = sentence;
                sentenceIndex = i;
                break;
            }
        }
        return {sentenceIndex: sentenceIndex, sentence:selectedSentence};
    }

Manyasha 26.08.2016 19:51

dev.div0, Здравствуйте,
так подойдет?
var text="Предложение номер раз. Второе предложение. Еще какой-то текст номер 3.";
var res=text.match(/[А-Я][^\.]+номер[^\.]+\./g);
alert("всего: "+res.length+"\n"+res);

destus 26.08.2016 20:00

Manyasha,
Букву Ё забыла :)

destus 26.08.2016 20:04

А вообще через lodash все это решается в одну строчку, а не как у ТС в 14 :(

dev.div0 01.09.2016 10:52

Спасибо за ответы.
([А-Я]{1}[^.]+[.]{1})

Вот эта регулярка выделяет все предложения. Ошибается при сокращениях, троеточиях, ссылках в html коде (<a href="http://mysite.com">)

https://regex101.com/r/iR0qL4/2 - тестирование

Цитата:

Сообщение от destus (Сообщение 426774)
А вообще через lodash все это решается в одну строчку, а не как у ТС в 14 :(

Интересная штучка. А Вы могли бы чуть поподробнее в контексте моей задачи осветить.

destus 01.09.2016 11:28

Цитата:

А Вы могли бы чуть поподробнее в контексте моей задачи осветить.
а что именно осветить? Алгоритм вам написали, осталось выдернуть нужные методы из апи и зачейнить их


Часовой пояс GMT +3, время: 08:09.