2013-08-23 2 views
1

Кто-нибудь знает, как сделать эту работу в IE8?IE8 Регулярное выражение не работает

var html = (function() {/* <!DOCTYPE html> <html> 
    <body> 
     <h1>Hello, world!</h1> 
    </body> </html>   
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]; 

Chrome возвращает этот (который является ожидаемым ответом)

<!DOCTYPE html> 
    <html> 
    <body> 
     <h1>Hello, world!</h1> 
    </body> 
    </html> 

но IE8 не нравится, она возвращает

'/' expected 

Я проверил ToString() участие в IE8 и содержит

"(function() {/* <!DOCTYPE html> <html> 
     <body> 
      <h1>Hello, world!</h1> 
     </body> </html>   
    */})" 

Цель состоит в том, чтобы извлечь то, что находится в комментарии, поэтому можно использовать многострочную строку в javascript без какого-либо добавленного символа. Итак, если кто-то придумает другое регулярное выражение, которое работает в IE8 и Chrome, это было бы здорово.

+3

В чем проблема, возникающая в IE 8. Всегда полезно сделать ** демо, которое люди могут видеть. Таким образом, вы получите ответ быстрее и легче. – iConnor

+0

Как это работает в Chrome? – Hamish

+1

Да. Каков ваш ожидаемый результат и каков ваш фактический результат? – Andy

ответ

0

Метод toString, примененный к функции, не обязательно возвращает исходный код точно так же, как и набранный. MDN говорит: «toString декомпилирует функцию, а возвращаемая строка включает ключевое слово функции, список аргументов, фигурные скобки и источник тела функции». Он также показывает, что это не стандартное и устаревшее. Стандарт ECMAscript имеет сказать следующее:

15.3.4.2 Function.prototype.toString ()

An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration. Note in particular that the use and placement of white space, line terminators, and semicolons within the representation String is implementation-dependent.

The toString function is not generic; it throws a TypeError exception if its this value is not a Function object. Therefore, it cannot be transferred to other kinds of objects for use as a method.

Я затрудняюсь сказать, что все JS поддержки реализации function.toString, но я не знаю ни, что не делает. Однако их реализация меняется. Chrome, кажется, возвращает полный источник, включая комментарии, Firefox удаляет комментарии.

У меня была такая же идея, как и ваша, чтобы использовать комментарии для передачи информации, но она оставила ее, когда обнаружила, что Firefox удалил их.

Все, что сказано, поскольку toString -, возвращающий строку комментария, должна быть проблема с RE. Нет, имеющие IE8 для тестирования я не могу предложить окончательное решение, но вы можете попробовать следующее:

/\/\*([^]*?)\*\/\}$/ 

Я удалил лишнее [^] * в начале и сделал захваченной [^] * нежадным , Как ваша оригинальная версия, так и моя измененная работа в моем браузере Chrome.

+0

>> source.match (/ \/\ * ([^] *?) \ * \/\} $ /) "']' ожидается в регулярном выражении" –

+1

Хм, у Chrome нет проблем с этим. Попробуйте заменить '[^]' на '[. \ N \ r]' – HBP

+0

source.match (/ \/\ * ([. \ N \ r] *?) \ * \/\} $ /) = > null –

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