Javascript.RU

Создать новую тему Закрытая тема
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.01.2012, 01:12
Аспирант
Отправить личное сообщение для qwertyuiop10 Посмотреть профиль Найти все сообщения от qwertyuiop10
 
Регистрация: 29.09.2011
Сообщений: 42

Небольшой вопрос по рег выр
"abcdef".match(/\w{2}/g)
//вернёт [ab,cd,ef]

как подправить рег выр, чтобы вернуло [ab,bc,cd,de,ef] сижу, туплю не могу понять (
  #2 (permalink)  
Старый 25.01.2012, 02:49
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

никак, регулярные выражения не умеют искать в обратную сторону. Если движок схавал символ для предыдущего правила, то он не сможет этот же символ добавить в следующее.
  #3 (permalink)  
Старый 25.01.2012, 03:29
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Можно с извратом и использованием двух массивов.

str= "abcdef";
arrExec= [];
arrRes=[];
reg= /\w\w/g
while ((arrExec= reg.exec(str)) !== null) {
 arrRes.push(arrExec);
 --reg.lastIndex;
};
alert(arrRes);


А можно и с одним массивом, но с ещё большим извратом.

str= "abcdef";
arrRes=[];
reg= /\w\w/g
while (arrRes.push(reg.exec(str)) && arrRes[arrRes.length-1] !== null) {
 --reg.lastIndex;
};
arrRes.pop(); // ибо последний элемент null, удаляем его
alert(arrRes);
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
  #4 (permalink)  
Старый 25.01.2012, 08:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от trikadin
Можно с извратом

alert("abcdef".replace(/(\w)/g,'$1$1').replace(/^\w|\w$/g,'').match(/\w{2}/g))
  #5 (permalink)  
Старый 25.01.2012, 08:20
Аспирант
Отправить личное сообщение для qwertyuiop10 Посмотреть профиль Найти все сообщения от qwertyuiop10
 
Регистрация: 29.09.2011
Сообщений: 42

trikadin,
Спасибо, но стоит немного изменить регуляторку, как всё не работает, немного изменил, теперь циклом меняя lastIndex с конца, переберём все значения.
str= "abcdef";
l=str.length;
arrExec= [];
arrRes=[];
reg= /\w\w\w/g

while(l--){
  reg.lastIndex=l;
  if((arrExec=reg.exec(str))!==null){
    arrRes.push(arrExec);
  }
}
arrRes.reverse();
alert(arrRes);


Можно здесь что-нибудь упростить?

Последний раз редактировалось qwertyuiop10, 25.01.2012 в 08:23.
  #6 (permalink)  
Старый 25.01.2012, 09:25
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от qwertyuiop10 Посмотреть сообщение
Можно здесь что-нибудь упростить?
Можно совсем не использовать регулярные выражения.

Разбили строку на массив, прошлись первый раз по массиву вернули первые три элемента, удалили первый элемент и т.д. крутим цикл пока в массиве более трех элементов.

Пример писать некогда, но регулярки тут необязательны.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
  #7 (permalink)  
Старый 25.01.2012, 10:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Вариант ...
function foo(f, c) {
    var c = c - 1, a = f.split(""), e = a.length - c;
    for (var b = 0; b < e; b++)
    for (var d = 1; d <= c; d++) a[b] += a[b + d];
    return a.slice(0, e)
};
var str =  "abcdef";
alert([foo(str,1),foo(str,2),foo(str,3)].join('\n'))
  #8 (permalink)  
Старый 25.01.2012, 12:00
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

поигрался со split :-)
alert("abcdef".split(/(?=(\w))/).join('').match(/\w\w/g))
  #9 (permalink)  
Старый 25.01.2012, 15:34
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

qwertyuiop10, ну я прям тащусь) Вы определяйтесь в следующий раз, по два вам элемента нужно или по три.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
  #10 (permalink)  
Старый 25.01.2012, 15:37
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

var x = "abcdef";
var z = /.(?=(.))/g;
var a = [];

while(w = z.exec(x)) a.push(w[0] + w[1]);

alert("[" + a.join(",") + "]");

var x = "abcdef", z = [];
for(var i = 0; i < x.length - 1; i++) z.push(x.substring(i, i + 2));

alert("[" + z.join(",") + "]");
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Закрытая тема


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49
Вопрос о циклических ссылках (JavaScript -> Dom -> JavaScipt) BlueIce Events/DOM/Window 10 17.02.2010 21:58
Небольшой вопрос по jQuery deepslam jQuery 10 30.01.2010 00:19