Регулярки: исключение условия из результатов поиска
Например, нужно получить цифры, обрамлённые дефисами, но без этих дефисов:
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, время: 21:20. |