PDA

Просмотр полной версии : RegExp replace: не удалять пробелы из текста в кавычках


Rzer
18.02.2011, 15:40
Я с RegExp'ом на Вы, нужна помощь:

Есть выражение /[\s\n]*/ig

Оно удаляет все пробелы и переносы. А нужно, чтобы текст в кавычках (", ') сохранялся в первозданном виде. Помогите составить выражение.

wvxvw
18.02.2011, 16:58
А внутри кавычек могут быть заэкранированые кавычки?
Хотя... в любом случае в цикле будет проще сделать, регулярка если и получится, то будет очень длинная... Или сначала разбить текс на части, без кавычек, заменить там, где нужно, и потом соеденить - так проще всего будет.

Rzer
18.02.2011, 17:01
нет, заэкранированых кавычек в тексте по идее быть не должно. Там будут их HTML коды ( " )

Волгоградец
18.02.2011, 17:04
На 99% уверен что одним выражением не обойтись. Я бы сделал так - разбил текст на составляющие - то что в кавычках и обычный текст. И дальше бы уже работал с этими строками. Но и надо понимать что такие вещи как кавычки вложенные в кавычки - это вещь вовсе не тривиальная и тоже одними регулярными выражениями определить их нельзя.

wvxvw
18.02.2011, 18:16
Что-нибудь такое.
private function removeSpacesOutsideQuotes(input:String):void
{
var last:int;
var resPart:String;
var parts:Vector.<String> = new <String>[];
var result:Object;
var re:RegExp = /(["'])[^\1]*?\1/g;

while (result = re.exec(input))
{
resPart = result[0];
parts.push(
input.substring(
last, re.lastIndex - resPart.length).replace(/\s+/g, ""));
parts.push(resPart);
last = re.lastIndex;
}
trace(parts.join(""));
}

Rzer
18.02.2011, 18:36
Спасибо за ответы

GBee
19.02.2011, 01:35
еще есть извращенный вариант split + join :о)

wvxvw
19.02.2011, 02:13
А как split / join учесть кавычки внутри кавычек? На первый взгляд я не увидел решения.

GBee
19.02.2011, 03:41
Пардон. Я неправильно понял задание. Подумал, что в кавычках всегда одно и то же. Спать мне пора.