Я пытаюсь обрезать ведущие и завершающие пробелы и символы новой строки из строки. Новые строки написаны как \n
(два отдельных символа, косая черта и n
). Другими словами, это строковый литерал, а не специальный символ CR LF.Почему это регулярное выражение так медленно?
Например, это:
\n \nRight after this is a perfectly valid newline:\nAnd here is the second line. \n
должны стать это:
Right after this is a perfectly valid newline:\nAnd here is the second line.
Я пришел к этому решению:
text = text
.replace(/^(\s*(\\n)*)*/, '') // Beginning
.replace(/(\s*(\\n)*)*$/, '') // End
Эти модели совпадают просто отлично согласно RegexPal.
Однако второй шаблон (соответствующий концу строки) занимает очень много времени — около 32 секунд в Chrome на строке с несколькими параграфами и несколькими конечными пробелами. Первый шаблон довольно быстрый (миллисекунды) в той же строке.
Here is a CodePen to demonstrate it.
Почему это так медленно? Есть ли лучший способ сделать это?
Возможные дублируют [обрезки в JavaScript? что этот код делает?] (http://stackoverflow.com/q/3387088/580951) – Romoku
@Romoku Я согласен, что другой вопрос относится к одной теме, но я ничего не вижу о производительности регулярных выражений. – Pointy
У вас есть огромная возможность, даже вложенная опциональность. Это очень медленно. Сделайте '.replace (/^\ s + /). Replace (/ \ s + $ /)' – Esailija