Совместимы ли регулярные выражения схемы XML с регулярными выражениями JavaScript/ECMAScript?

Я автор компилятора/трансформатора XML-Schema-to-JSON-Schema. Пользователь недавно спросил, можно ли также поддерживать xs:pattern в схеме JSON.

Схема JSON поддерживает регулярные выражения, поэтому теоретически это должно быть возможно.

Однако это предполагает, что синтаксис и семантика регулярных выражений схемы XML совместимы с таковыми в JavaScript/ECMAScript. Потому что, если это не так, я, вероятно, не смогу разобрать и перевести один диалект регулярного выражения на другой без особых усилий.

Я не могу ответить на этот вопрос без тщательного анализа обеих спецификаций:

Итак, я хотел бы спросить:

Являются ли регулярные выражения схемы XML совместимыми с регулярными выражениями JavaScript/ECMAScript?

В частности, могу ли я использовать допустимое регулярное выражение из XML-схемы в JavaScript (через RegExp или подобное)?

Я читал, что регулярные выражения XML-схемы довольно ограничены, поэтому, надеюсь, они будут работать в более мощной среде, но мне трудно сказать, так ли это здесь.

Здесь я предполагаю XML-схему 1.0 и ECMAScript 5.1.


person lexicore    schedule 02.11.2015    source источник
comment
Они не совместимы. В XML-схеме вы можете использовать классы категорий Unicode и не можете использовать их в JS (ES5, текущая реализация). Кроме того, вычитание класса символов не поддерживается в регулярном выражении JS. Кроме того, сокращенные классы \w, \d и \s могут соответствовать символам Unicode, а в ES5 — нет. Многосимвольные escape-последовательности \i, \l, \c, \C также не поддерживаются в ES5.   -  person Wiktor Stribiżew    schedule 02.11.2015
comment
@stribizhev Не могли бы вы опубликовать это как ответ?   -  person lexicore    schedule 02.11.2015


Ответы (1)


Синтаксисы регулярных выражений ES5 и XML-схемы несовместимы.

В XML-схеме вы можете использовать классы категорий Unicode (называемые экранированием категорий< /em>), и вы не можете использовать их в JavaScript ES5.

Кроме того, вычитание класса символов не поддерживается в регулярных выражениях JavaScript.

Кроме того, сокращенные классы \w, \d и \s могут соответствовать символам Unicode, а в ES5 — нет. \i, \l, \c, \C "многосимвольные escape-последовательности" не поддерживается и в ES5.

person Wiktor Stribiżew    schedule 02.11.2015
comment
Более того, . в XML-схеме соответствует любому символу Юникода (включая астральные символы), тогда как в ES5 он соответствует половине суррогатной пары. Это меняется с регулярными выражениями Unicode в ES6. Есть и другие незначительные отличия, такие как значение \d. - person Michael Kay; 07.04.2016