Небольшой вопрос по рег выр
"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, время: 06:12. |