#javascript #angular #regex #aot #ng-packagr
Вопрос:
Когда я создаю библиотеку пользовательского интерфейса angular с помощью ng-packagr, в файле определено следующее регулярное выражение
> /^(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,=
<>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-
f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <
>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f
]{2})*"))*(?:,(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <
>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f
]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>
#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]
{2})*"))*)*$/.test("CN=abcd,CN=abcd,O=abcd,C=us")
true
Чтобы создать библиотеку, мне нужно преобразовать тип регулярного выражения в строковый тип, но при создании библиотеки angular я столкнулся с проблемой.
Поэтому я попытался преобразовать регулярное выражение в строку. но регулярное выражение не находится в удобочитаемом формате. так как мы должны преобразовать все » в «и». «в»»
Поэтому я придумал другое решение, используя метод String.raw, в котором я могу просто передать существующее регулярное выражение в метод String.raw без изменений
static BASEDN: RegExp = new RegExp(String.raw`^(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*"))*(?:,(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*"))*)* #javascript #angular #regex #aot #ng-packagr
Вопрос:
Когда я создаю библиотеку пользовательского интерфейса angular с помощью ng-packagr, в файле определено следующее регулярное выражение
> /^(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <>#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa- f]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= < >#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f ]{2})*"))*(?:,(?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= < >#;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f ]{2})*")(?: (?:[A-Za-z][w-]*|d (?:.d )*)=(?:#(?:[dA-Fa-f]{2}) |(?:[^,= <> #;\"]|\[,= <>#;\"]|\[dA-Fa-f]{2})*|"(?:[^\"]|\[,= <>#;\"]|\[dA-Fa-f] {2})*"))*)*$/.test("CN=abcd,CN=abcd,O=abcd,C=us") true
Чтобы создать библиотеку, мне нужно преобразовать тип регулярного выражения в строковый тип, но при создании библиотеки angular я столкнулся с проблемой.
Поэтому я попытался преобразовать регулярное выражение в строку. но регулярное выражение не находится в удобочитаемом формате. так как мы должны преобразовать все " в "и". "в""
Поэтому я придумал другое решение, используя метод String.raw, в котором я могу просто передать существующее регулярное выражение в метод String.raw без изменений
);
Но не удалось создать библиотеку пользовательского интерфейса с помощью компилятора ngc. Поскольку компилятор AOT не поддерживает выражения шаблонов с тегами; избегайте их в выражениях метаданных.
https://angular.io/guide/aot-metadata-errors#tagged-template-expressions-not-supportedСтолкнувшись с приведенной ниже ошибкой:
regex.enums.ts:23:10: Metadata collected contains an error that will be reported at runtime: Reference to a non-exported function. {"__symbolic":"error","message":"Reference to a non-exported function","line":22,"character":9,"context":{"name":"RegExp"}}
Поэтому, чтобы решить эту проблему, у меня есть решение в Интернете, которое мы можем использовать
// @динамическая аннотация к классу/функции, чтобы избежать компиляцииНо @динамическая аннотация устарела с Ivy, учитывая, что ее система метаданных постепенно выходит из строя. Поэтому я не уверен, как решить эту проблему. Пожалуйста, помогите, могу ли я использовать динамическую аннотацию здесь или есть какой-либо другой способ решить эту проблему?
Комментарии:
1. Конструктор регулярных выражений принимает строковый параметр. Вы передаете литерал регулярного выражения. Вам не нужен конструктор, если у вас есть буквальное регулярное выражение.
2. Спасибо за ваш вклад. Отредактировал мой вопрос. Мой файл содержит строку, а не буквальное регулярное выражение, которое я передаю в конструктор регулярных выражений, когда я использую метод String.raw, он работает как шарм. Но когда я его создаю, он терпит неудачу с ошибками метаданных.
3. Попробуйте одну из этих допустимых строк JS // разделители или » разделители или «» разделители