Regex - сопоставить текст между 2 символами - PullRequest
0 голосов
/ 02 июня 2010

Мне нужны шаблоны регулярных выражений, которые будут соответствовать словам перед двоеточием, а также значениям между 2 символами. Вот пример, у меня есть строка:

str='`width: 1070px; padding: 0px 10px 0px 10px; height: auto; margin:0px auto 0px auto;`' 

из таблицы стилей, мне нужен один массив для хранения только свойства (текст перед двоеточием),

(prptyArray[0]='width', prptyArray[1]='padding') 

и еще один для хранения только значения (текст между 2 символами)

(valueArray[0]='1070px', valueArray[1]='0px 10px 0px 10px')

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 июня 2010

([\ ш -] +): \ S * ([# \ w- \ s \ d] +) * * +1001

В Javascript нет метода для групп подстрок. exec возвращает только 1-ю найденную группу. Попробуйте exec в онлайн-тестере регулярных выражений Но все же вы можете получить все субматчи на лету. Попробуйте следующий скрипт,

var str = "width: 1070px; padding: 0px 10px 0px 10px; height: auto; margin:0px auto 0px auto;";
var value1 =[];
var value2 =[]; 
var tmp;

do { 
    tmp = str;
    str = str.replace(/([\w-]+):\s*([\#\w-\s\d]+);?/,function($0,$1,$2){
        name1.push($1);
        name2.push($2);
        return $0.replace($1,"").replace($2,"");
    });

} while(tmp!=str);

alert(value1 +"\n"+value2);
0 голосов
/ 02 июня 2010

как то в .net

[A-Za-z]+:{1}[A-Za-z0-9 ]+;{1}

Если вы хотите получить доступ к имени и значениям свойства по отдельности, вам придется реализовать группировку в выражении, аналогичном измененному выражению ниже. Группировка осуществляется с помощью символов "()" вокруг группы или части выражения, которое вы хотите захватить.

([A-Za-z]+):{1}([A-Za-z0-9 ]+);{1}

Теперь вы сможете получить результаты, подобные этим.

myRegex = new Regex("([A-Za-z]+):{1}([A-Za-z0-9 ]+);{1}");

match = myRegex.exec("String you would like to parse");

while (match != null) 
{
    match[0]  // property name: 
    match[1] // values:
}

Наслаждайтесь!

...