Javascript заменяет символ новой строки - PullRequest
3 голосов
/ 26 января 2010

Это сводит меня с ума, у меня есть строка в формате:

<br />
twice<br />
imap Test wrote:<div class="nestedMessage1"><br />
> nested<br />
><br />
> imap@gazler.com wrote:<div class="nestedMessage2"><br />
>> test<br />
>><br />
>> -- <br />
>> Message sent via AHEM.<br />
>>   </div><br />
><br /><br /></div>

И следующий код:

string = string.replace(/\n/g, "");
string = replaceAll(string, "<br />>", "<br />");

function replaceAll(string, replaceString, replaceWith)
{
  return string.replace(new RegExp(replaceString, 'g'),replaceWith);
}

То, что я пытаюсь сделать, это удалить
> и заменить его просто
Я не могу просто заменить все вхождения>, поскольку они могут содержаться в другом месте строки, поэтому хочу удалить их в начале. Я пробовал экранирующие символы и жестко закодировал регулярное выражение, чтобы явно удалить новые строки вместо того, чтобы включать их в вызов функции. Любая помощь будет оценена.

1 Ответ

9 голосов
/ 26 января 2010

Если ваша цель просто удалить все > в начале строк, это легко сделать:

var out = in.replace(new RegExp("^>+", "mg"), "");

или

var out = in.replace(/^>+/mg, "");

Флаг m означает многострочность, поэтому ^ и $ будут соответствовать началу и концу строк, а не только началу и концу строки. См. Объект RegExp .

Редактировать: Стоит отметить, что вы должны , вероятно, одобрить использование объекта RegExp над второй формой (литерал регулярного выражения). См. Всегда ли / regex / Literal объекты RegExp? и Почему RegExp с глобальным флагом в Javascript дает неверные результаты? .

Кроме того, в браузере есть различия в том, как обрабатывается глобальный флаг для литерала регулярных выражений, который используется более одного раза. Лучше всего избегать этого и явно использовать объект RegExp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...