Небольшой вопрос по рег выр
"abcdef".match(/\w{2}/g)
//вернёт [ab,cd,ef] как подправить рег выр, чтобы вернуло [ab,bc,cd,de,ef] сижу, туплю не могу понять ( |
никак, регулярные выражения не умеют искать в обратную сторону. Если движок схавал символ для предыдущего правила, то он не сможет этот же символ добавить в следующее.
|
Можно с извратом и использованием двух массивов.
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);
|
Цитата:
alert("abcdef".replace(/(\w)/g,'$1$1').replace(/^\w|\w$/g,'').match(/\w{2}/g))
|
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);
Можно здесь что-нибудь упростить? |
Цитата:
Разбили строку на массив, прошлись первый раз по массиву вернули первые три элемента, удалили первый элемент и т.д. крутим цикл пока в массиве более трех элементов. Пример писать некогда, но регулярки тут необязательны. |
Вариант ...
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'))
|
поигрался со split :-)
alert("abcdef".split(/(?=(\w))/).join('').match(/\w\w/g))
|
qwertyuiop10, ну я прям тащусь) Вы определяйтесь в следующий раз, по два вам элемента нужно или по три.
|
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(",") + "]");
|
| Часовой пояс GMT +3, время: 22:05. |