Обычно для обрезки должно быть достаточно выражения типа ^\s+|\s+$
, поскольку \s
должен соответствовать всем пробелам, даже \0xa0
неразрывным пробелам 1 .Это выражение должно выполняться без проблем.
Теперь, возможно, какой-то браузер, который хочет поддерживать jQuery, не соответствует \0xa0
с \s
, и чтобы обойти эту проблему, jQuery добавил альтернативу (\s|\0xa0)
, чтобыобрезать неразрывные пробелы и в этом браузере.
С этим изменением вторая часть регулярного выражения выглядит как (\s|\0xa0)+$
, что приводит к проблемам в браузерах, где \0xa0
также соответствует \s
,В строке, содержащей длинную последовательность \0xa0
символов, каждому символу может соответствовать \s
или \0xa0
, что приводит к множеству альтернативных совпадений и экспоненциально большому количеству комбинаций, позволяющих комбинировать различные совпадения.Если эта последовательность символов \0xa0
не находится в конце строки, условие конечного $
никогда не может быть выполнено, независимо от того, какие пробелы соответствуют \s
, а какие - \0xax
, но браузерне знает этого и пробует все комбинации, возможно, ищет в течение очень долгого времени.
Предлагаемого вами упрощенного выражения будет недостаточно, поскольку \s
должен соответствовать всем символам пространства Юникода, а не только хорошоизвестные ASCII.
1 Согласно MDC , \s
эквивалентно [\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]