Я пытаюсь выполнить какие-то причудливые манипуляции со строками в ExtendScript с помощью регулярных выражений. Я тестирую код, который эффективно преобразует одинарные и двойные кавычки в «фигурные кавычки» или «умные кавычки». Я использую код из здесь и здесь в качестве основы для этой функции.
sanitize : function (arg) {
if (arg && (typeof arg == 'string')) {
arg = arg.replace(/(^|[-\u2014\s(\["])'/g, "$1\u2018"); // opening singles
arg = arg.replace(/'/g, "\u2019"); // closing singles & apostrophes
arg = arg.replace(/(^|[-\u2014/\[(\u2018\s])"/g, "$1\u201c"); // opening doubles
arg = arg.replace(/"/g, "\u201d"); // closing doubles
arg = arg.replace(/--/g, "\u2014"); // em-dashes
}
return arg;
}
`` ''
По-видимому, это работает в браузере, но не работает в сценарии ExtendScript. ExtendScript - это расширенный набор Javascript, соответствующий ECMA-262 версии 3, и я думаю, что реализация регулярных выражений в этой версии несколько отличается от современных версий сценария ECMA. В любом случае, кто-нибудь знает, почему я могу получить «синтаксическую ошибку», когда запускаю этот код из набора инструментов Adobe ExtendScript?
В частности, строка, о которой сообщается как имеющая синтаксическую ошибку, является следующей:
arg = arg.replace(/(^|[-\u2014/\[(\u2018\s])"/g, "$1\u201c");
Если я удалю эту строку, то синтаксическая ошибка не будет сообщаться, но тогда строка будет неправильно обработана. Я не понимаю, как преобразовать RegEx во что-то, что можно интерпретировать с помощью ExtendScript. Любые идеи?
Какую именно косую черту вы имеете в виду?
В вашем регулярном выражении есть один символ косой черты.
Прошу прощения, но я вижу более одного в проблемной строке. Вы можете быть конкретными?
Тот, что здесь \u2014/
@revo ты был прав! Если экранировать косую черту, синтаксическая ошибка не сообщается. Однако похоже, что этот конкретный RegEx ничего не делает со строкой. То есть он не заменяет «открывающие двойные» кавычки на фигурные / «умные» открывающие двойные кавычки. Я не уверен, какую функцию RegEx использует эта строка, но, может быть, она не поддерживается для ECMA-262? Я слышал, что у некоторых нет "оглядки назад" или чего-то в этом роде ...
Lookbehind пока не поддерживаются (в значительной степени). Думаю, проблема кроется в самой логике.
И все же сам код дублируется с двух разных ресурсов.
В этом-то и дело. Это секунда моего слова.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Может быть, это из-за неэкранированной косой черты? Избавьтесь от этого и проверьте.