Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите составить регулярное выражение (https://javascript.ru/forum/misc/14205-pomogite-sostavit-regulyarnoe-vyrazhenie.html)

Aetae 10.01.2011 17:57

Неправильно пониаешь. RTFM
. - любой символ.
+ - повторить 1 и более раз.
? после множителя - обозначение "не жадности", те /a.+d/ съест в 'abcdabcd' всё, а /a.+?d/ только 'abcdabcd'.

ksa 10.01.2011 20:57

Aetae, еще раз спасибо! :)

MCTrane 10.01.2011 21:28

Получается это невозможно сделать для моего случая?

Aetae 10.01.2011 21:32

Возможно все, а это - раз плюнуть.
Но никто не сделает это за вас, учитесь.

MCTrane 10.01.2011 23:25

Цитата:

Сообщение от Aetae (Сообщение 87240)
а /a.+?d/ только 'abcdabcd'.

Использую .+?, удаляет всё, что с ?, что без...
от самого первого JOOM, до нужного элемента...

monolithed 10.01.2011 23:33

Цитата:

Сообщение от MCTrane
Не знаю.

это была шутка
Цитата:

Сообщение от MCTrane
Блин, обьясните пожалуйста почему рег. выражение beg2+'+?.'+end2 не работает

и не будет, потому что это в меньшей степени похоже на регулярное выражение.


alert('JOOMtest3*test4JOOMtest5*test6JOOM'.replace(/JOOMtest3(.*)test6JOOM/, '$1'));

MCTrane 10.01.2011 23:40

monolithed,
"это была шутка"
Я даже не понимаю о какой спецификации ты?
А что ты за код привёл?

x-yuri 11.01.2011 01:24

Цитата:

Сообщение от MCTrane
Я просто пытаюсь разобраться в регулярных выражениях в js

так бы и написал с самого начала

Цитата:

Сообщение от MCTrane
Использую .+?, удаляет всё, что с ?, что без...

var s = 'abcdabcd';
alert([
    s.replace(/a.+d/, 'x'),
    s.replace(/a.+?d/, 'x')
]);

ksa 11.01.2011 09:22

monolithed, жаль что не даёт тебе плюсануть... :( Но спасибо за пример т.с. "на словах" :)

Про "жадность" вроде как тоже понял... :D

MCTrane 11.01.2011 13:25

Что не хватает в этом рег. выражении, всё уже перепробовал что в голове нашёл, то удаляет всё до сейчас он удаляет всё до "test3JOOM", то вообще всё удаляет, то ничего не удаляет, вот выбрал один из рег. выражений в котором удаляется всё до "test3JOOM", не как не пойму что добавить к нему(
var text = "test3";
var beg = "JOOM";
var end = text+"JOOM";
var end2 = "JOOM";
var str = "JOOMtest1*test2JOOMtest4*test3JOOMtest5*test6JOOM";
var test=new RegExp(beg+'.+?.+?'+end, "g");

	alert(str.replace(test,end2))

x-yuri 11.01.2011 22:28

Цитата:

Сообщение от MCTrane
всё уже перепробовал что в голове нашёл

потому что если что-то не работает, надо пытаться понять, почему оно не работает. А не наугад перебирать варианты. Поставь себе regexbuddy и разберись, почему оно не работает

а с подобными форматами лучше поступать по-другому:
function QueryString( v ){
    if( v instanceof Array )
        this._assoc = v;
    else {
        this._assoc = {};
        var pairs = v.substr(1).split('&');
        for( var i=0; i<pairs.length; i++ ){
            var nameValue = pairs[i].split('=');
            this._assoc[ decodeURIComponent(nameValue[0]) ] = decodeURIComponent(nameValue[1]);
        }
    }
}

QueryString.prototype.val = function( n, v ){
    if( arguments.length > 1 )
        this._assoc[n] = v;
    return this._assoc[n];
};

QueryString.prototype.unset = function( n ){
    delete this._assoc[n];
};

QueryString.prototype.toAssoc = function(){
    return this._assoc;
};

QueryString.prototype.toString = function(){
    var r = [];
    for( var k in this._assoc )
        r.push( encodeURIComponent(k)+'='+encodeURIComponent(this._assoc[k]) );
    return '?'+r.join('&');
};

function assocToString( assoc ){
    var r = [];
    for( var k in assoc )
        r.push( "'"+k+"': '"+assoc[k]+"'" );
    return '{'+r.join(',')+'}';
}

var qs = new QueryString('?name1=value1&name2=value2');
alert( assocToString(qs.toAssoc()) );
qs.unset( 'name1' );
alert( assocToString(qs.toAssoc()) );
qs.val( 'name3', 'value3' );
alert( assocToString(qs.toAssoc()) );
qs.val( 'name3', 'value4' );
alert( assocToString(qs.toAssoc()) );
alert( qs.val('name2') );
alert( qs.toString() );

MCTrane 11.01.2011 23:06

Цитата:

Сообщение от Aetae (Сообщение 87269)
Возможно все, а это - раз плюнуть.
Но никто не сделает это за вас, учитесь.

Ну раз это так легко, напиши как, пожалуйста.
Цитата:

Сообщение от x-yuri (Сообщение 87504)
потому что если что-то не работает, надо пытаться понять, почему оно не работает. А не наугад перебирать варианты. Поставь себе regexbuddy и разберись, почему оно не работает

Так в том то и дело что работает, только не правильно.

x-yuri 12.01.2011 00:05

оно работает правильно, но ты не понимаешь, как оно работает. Разберись, дальше можно будет о чем-то говорить. А ты как думал, тебе тут готовый результат выдадут, а тебе делать ничего не надо будет?

MCTrane 12.01.2011 00:09

Я понимаю почему удаляет всё, я не знаю что добавить чтобы это предотвратить и поэтому думал что невозможно, но Aetae сказал что это возможно.

x-yuri 12.01.2011 00:21

хорошо, почему удаляет все?

MCTrane 12.01.2011 13:13

Ну потому что у меня первое слово в строке JOOM, а выражение моё читает так:
начинай с JOOM и до test3JOOM удаляй всё. А JOOM у меня в самом начале и поэтому от него и удаляет всё до test3JOOM

x-yuri 13.01.2011 06:03

Цитата:

Сообщение от MCTrane
удаляй всё

значит осталось ограничить твое "удаляй все" или ".*", например. Какие символы могут использоваться после JOOM и перед *?

MCTrane 13.01.2011 14:48

Цитата:

Сообщение от x-yuri (Сообщение 87767)
Какие символы могут использоваться после JOOM и перед *?

a-z,0-9 и ещё "_"

x-yuri 13.01.2011 15:17

ну и? '.' обозначает любой символ. Как в регулярных выражениях указать "диапазон символов"?

MCTrane 13.01.2011 17:31

[a-z], [0-9], но ведь и до нужного JOOM эти символы, так не получиться ограничить.

x-yuri 13.01.2011 18:55

ну как это не получиться?
alert('JOOMtest1*test2JOOMtest4*test3JOOMtest5*test6JOOM'.replace(/JOOM[a-z0-9_]+\*test3JOOM/, 'JOOM'));

MCTrane 13.01.2011 19:25

x-yuri,
Спасибо большое, так после самого первого JOOM тоже есть символы a-z,0-9,"_", поэтому и думал что не получится.


Часовой пояс GMT +3, время: 15:40.