Обработка новой строки в Javascript Regex Substitution в браузерах - PullRequest
0 голосов
/ 13 января 2011

Я создал html textarea с возможностью добавлять «[» и «]» в начале и в конце любого текста, который был введен в это.

Моя проблема в том, что когда я вводю некоторые многострочные данные в текстовое поле, регулярное выражение обрабатывается по-разному в ff и ie.

Ввод:

Iam
learning
regex

Ожидаемый вывод: (Я получаю это в FF)

[Iam]
[learning]
[regex]

Выход в IE:

[Iam
][]
[learning
][]
[regex]

Код регулярного выражения здесь:

(textareaIDelement.value).replace(/(^)(.*)(\n{0,})($)/gm, "[" + "$2" +"]");

Я добавил (\n{0,}) в регулярное выражение для соответствия символам новой строки ... но это не имеет никакого эффекта ..

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 января 2011

В IE разделителем строк в свойстве value текстовой области является \r\n. Во всех других основных браузерах это \n. Простым решением было бы сначала нормализовать разделители строк в \n. Я также упростил регулярное выражение:

textareaIDelement.value.replace(/\r\n/g, "\n").replace(/^(.*)\n*$/gm, "[$1]");
1 голос
/ 13 января 2011

Я предполагаю, что Firefox использует один 0x0A (\n) в качестве разделителя строк, тогда как IE использует разделитель Windows 0x0D 0x0A (\r\n).

В зависимости от точной семантики библиотеки регулярных выражений, она, вероятно, соответствует обоим символам Windows независимо друг от друга как разделители строк, поэтому обнаруживает конец строки, за которым следует строка из 0 символов.

(Это не фактический ответ сам по себе, поскольку я не очень хорошо знаю, как именно JS обрабатывает метасимволы регулярных выражений, но, надеюсь, он укажет вам правильное направление.)

...