В двойных кавычках \1
и \2
интерпретируются как буквальные 1
и 2
. Вам нужно добавить дополнительные обратные слеши, чтобы избежать их. Кроме того, замена $(command substitution)
в sed
, по-видимому, не работает в сочетании с обратными ссылками. Если вы используете GNU sed
, вы можете вместо этого сказать что-то вроде:
echo '"1.2e+04"' | sed "s/\"\([0-9]\+\.[0-9]\+\)e+\([0-9]\+\)\"/echo \"\\1*10^\\2\"|bc -l/;e"
, что дает:
12000.0
Если вы хотите отрубить десятичную точку, вы будете знать что делать; -).
Установка innerHTML разжигает синтаксический анализатор HTML, который игнорирует избыточный пробел включая жесткие переводы строки. При изменении метода для включения <пред> тег в строке, это хорошо работает, потому что синтаксический анализатор HTML сохраняет жесткие переводы строки.
Вы видите это в действии путем выполнения Представления Сгенерированный Источник после выполнения демонстрационной страницы:
<PRE id="test" style="WHITE-SPACE: pre"><SPAN style="COLOR: red">a</SPAN> b c d e f </PRE>
Вы видите здесь, что жесткий перевод строки больше не является частью содержания <пред> тег.
Обычно Вы заставите более последовательные результаты при помощи методов DOM создавать динамический контент, особенно когда Вы будете заботиться о тонких вещах как нормализация пробела. Однако, если Вы установлены при использовании innerHTML для этого, существует обходное решение IE, которое должно использовать outerHTML
атрибут, и включает теги включения.
if(test.outerHTML)
test.outerHTML = '<pre id="test">'+textContent+'</pre>';
else
test.innerHTML = textContent;
Это обходное решение и больше обсуждения могут быть найдены здесь: Вставляя новую строку в пред тег (IE, JavaScript)
или вы могли бы
if (el.innerText) {
el.innerText = val;
} else {
el.innerHTML = val;
}
Это также можно переписать "по-питоновски", т.е.:
el.innerText && el.innerText = val || el.innerHTML = val;