Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   вывести слова определенной длины с помощью регулярных выражений (https://javascript.ru/forum/dom-window/61196-vyvesti-slova-opredelennojj-dliny-s-pomoshhyu-regulyarnykh-vyrazhenijj.html)

alexandr2006 08.02.2016 10:57

вывести слова определенной длины с помощью регулярных выражений
 
var text = 'яблоко, сок, морковка, помидор, тыква, арбуз'

// Найти слова, в которых 5 букв
console.log('5 букв: ', text.match(/\b\w{5}\b/g));


Но оказывается \b с кириллицей не работает. Как быть?

рони 08.02.2016 11:01

alexandr2006,
регулярка то зачем? длину и меряйте

рони 08.02.2016 11:08

alexandr2006,
var text = 'яблоко, сок, морковка, помидор, тыква, арбуз'

// Найти слова, в которых 5 букв
alert(text.split(/[\s,]+/).filter(function(el) {
  return el.length == 5
}));

alexandr2006 08.02.2016 12:10

А мне надо регуляркой

destus 08.02.2016 12:59

Цитата:

Сообщение от alexandr2006 (Сообщение 406820)
А мне надо регуляркой

попробуй так
<script>
         document.addEventListener('DOMContentLoaded', function () {
             var text = 'яблоко, сок, морковка, помидор, тыква, арбуз';
             text = ' ' + text + ' ';
             var res = text.match(/[^А-Яа-яёЁ]([А-Яа-яёЁ]{5})(?=[^А-Яа-яёЁ])/g);
             var res2 = res.map(function(elem){
                 return elem.replace(/\s*/g,'');
             })
             alert('5 букв: ' + res2);
         })

	</script>

рони 08.02.2016 14:33

destus,
с пробелом и без первого слова

destus 08.02.2016 14:49

Цитата:

Сообщение от рони (Сообщение 406841)
destus,
с пробелом и без первого слова

В первом слове не пять букв.

рони 08.02.2016 15:16

destus,
а ты сделай одно слово из 5 букв и посмотри что будет

destus 08.02.2016 15:25

Цитата:

Сообщение от рони (Сообщение 406847)
destus,
а ты сделай одно слово из 5 букв и посмотри что будет

http://pixs.ru/showimage/adadadadpn_...3_20595101.png

рони 08.02.2016 16:53

destus,
:) а если так
<script>
         document.addEventListener('DOMContentLoaded', function () {
             var text = ',арбуз';
             text = ' ' + text + ' ';
             var res = text.match(/[^А-Яа-яёЁ]([А-Яа-яёЁ]{5})(?=[^А-Яа-яёЁ])/g);
             var res2 = res.map(function(elem){
                 return elem.replace(/\s*/g,'');
             })
             alert('5 букв: ' + res2);
         })

	</script>

destus 08.02.2016 17:12

Цитата:

Сообщение от рони (Сообщение 406858)
destus,
:) а если так
<script>
         document.addEventListener('DOMContentLoaded', function () {
             var text = ',арбуз';
             text = ' ' + text + ' ';
             var res = text.match(/[^А-Яа-яёЁ]([А-Яа-яёЁ]{5})(?=[^А-Яа-яёЁ])/g);
             var res2 = res.map(function(elem){
                 return elem.replace(/\s*/g,'');
             })
             alert('5 букв: ' + res2);
         })

	</script>

Ну букв же тут 5 :lol: :lol:

А вообще чтобы не было такого можно в return elem.replace(/\s*/g,'') включать удаление всего, что не буква русского алфавита. Например, так

<script>
         document.addEventListener('DOMContentLoaded', function () {
             var text = ',арбуз';
             text = ' ' + text + ' ';
             var res = text.match(/[^А-Яа-яёЁ]([А-Яа-яёЁ]{5})(?=[^А-Яа-яёЁ])/g);
             var res2 = res.map(function(elem){
                return elem.replace(/[^А-Яа-яёЁ]*/g, '');
             })
             alert('5 букв: ' + res2);
         })

	</script>

Deff 08.02.2016 23:56

Вариант2:
var text = 'яблоко, сок, морковка, морковка, помидор, ,тыква, арбуз'
function getword(text,L) {
   var reg = new RegExp("(?:^|[^а-яё])[а-яё]{"+(L-1)+"}[a-zа-яё](?=[^а-яё]|$)", "ig");
   return text.match(reg).join(',').replace(/^[^а-яё]+/,'').split(/[^а-яё]+/);
}
alert(getword(text,5))

рони 09.02.2016 00:14

Deff,
c match трудно избежать пробела в начале

alexandr2006 09.02.2016 10:31

Цитата:

Сообщение от Deff
Вариант:
1 var text = 'яблоко, сок, морковка, помидор, тыква, арбуз'
2 function getwords(text,L) {
3 var reg = new RegExp("(?:^|[\\b\\., ])[a-zа-яё]{"+(L-1)+"}[a-zа-яё](?=[\\b\\., ]|$)", "ig");
4 return text.match(reg);
5 }
6 alert(getwords(text,8))

Хм. Вроде переписал правильно, а почему-то выводит null

var text = 'яблоко, сок, морковка, помидор, тыква, арбуз'
function getwords(text) {
var reg = /(?:^|[\b\., ])[a-zа-яё]{7}[a-zа-яё](?=[\b\., ]|$)/ig;
  return text.match(reg);
}
alert(getwords(text)

рони 09.02.2016 11:30

alexandr2006,
6 строка где ) в конце? ну и кодировку указать <meta charset="utf-8">

Deff 09.02.2016 22:07

Цитата:

Сообщение от alexandr2006
Хм. Вроде переписал правильно, а почему-то выводит null

1. Есть кнопка копирования , правее кода, после наведения на "Запустить"


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