2011-01-13 3 views
0

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

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

Вход:

Iam 
learning 
regex 

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

[Iam] 
[learning] 
[regex] 

выход в IE:

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

Код Regex здесь:

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

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

Благодаря

+0

'{0,}' (ноль или более повторений) можно записать как '*', кстати. –

ответ

3

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

textareaIDelement.value.replace(/\r\n/g, "\n").replace(/^(.*)\n*$/gm, "[$1]"); 
+0

Спасибо! - Это сработало!! – Sekhar

1

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

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

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

+0

Ваша первая точка точно верна. –

Смежные вопросы