Регулярки: исключение условия из результатов поиска
Например, нужно получить цифры, обрамлённые дефисами, но без этих дефисов:
var str = "aaaaaaa-0-aaa-02-aaa-3-aa-4aaa8-aaa-4-a232a7a8a": var r = /-\d+-/g // Так будет вместе с дефисами. var r = /-\d+(?=-)/g // Так будет с одним дефисом слева. var r = /(?=-)\d+(?=-)/g // А так match вернёт null :-( Прошу помощи в поиске ответа на вопросы: 1. Как получить цифры без дефисов в указанном случае максимально простой регуляркой? 2. Почему третий вариант r не работает? |
Поскольку регулярные выражения в js не поддерживают ретроспективных проверок, остается извращаться. Например, так
var str = "aaaaaaa(-12-)aaa(02)aaa(3)aa(4aaa8)aaa(4)a232a7a8a"; alert( /-(\d+)(?=-)/.exec( str )[ 1 ] ); Цитата:
alert( "[]".replace( /(?=])/, '1234' ) ); |
nerv_, а я себе даже такой костыль сделал:
function normalMatch(r, text) {
var result = [ ], oneResult;
while( oneResult = r.exec( text ) ) {
result.push( oneResult[1] );
}
return result;
}
var str = "aaaaaaa-0-aaa-02-aaa-3-aa-4aaa8-aaa-4-a232a7a8a";
var r = /-(\d+)-/g;
alert( normalMatch( r, str ) );
Но думал есть что-то попроще... |
Я вот только не пойму, откуда в моем примере скобки взялись вместо дефисов? :blink:
the magic :D |
nerv_, это я вначале скобки выложил по ошибке =)
|
Цитата:
<script type="text/javascript">
var str ='aaaaaaaa-0-aaa-02-aaa-3-aa-4aaa8-aaa-4-a232a7a8a';
var Dig=str.split(/[\s\S]*?(\-[0-9]+?-)/ig) //
//alert(Dig)
if(str!=Dig[0]){
var DigOut=[], j = 0;
for(var i in Dig){
if(Dig[i].replace(/[0-9]+/ig,'')=='--'){
DigOut[j]=-parseFloat(Dig[i]);j++; //Тут первый "0" - отбрасывает,посколь цифра, если нужна строка, мон релизовать иначе
}
} alert(DigOut);
} else {alert('Не найдено')}
</script>
|
я так делаю
txt = "dfhsdfj-26774-jdfur"; reg=/-\d+(\.\d+)?-/img; chislo=txt.match(reg); chislo=chislo[0].toString();//так обрабатывается один результат, но спомощью цикла можно все получить chislo=chislo.replace(/-/img,""); alert(chislo) |
правда, может быть опасно, ибо не учитывается дефис перед числом. зато без цикла :)
alert( "aaaaaaa-0-aaa-02-aaa-3-aa-4aaa8-aaa-4-a232a7a8a".match(/\d+(?=-)/g).join("\n") );
|
melky, Красиво!
|
| Часовой пояс GMT +3, время: 09:26. |