Введение

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

Фоновые проблемы

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

Но иногда мы обнаруживали, что регулярное выражение не работает должным образом для обеих сторон. Как будто это работает на бэкэнде, но не на фронтенде. Например, это регулярное выражение:

^[\p{Hiragana}\p{Katakana}ー]{1,20}$

Вот результат при запуске с использованием Go (работает нормально):

Однако использование JavaScript приводит к противоположному результату:

Решение

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

В Golang есть библиотека для запуска кода JavaScript под названием otto. Пакет otto — это парсер и интерпретатор JavaScript, изначально написанный на Go. Таким образом, мы можем создать скрипт на Golang и проверить оба!

Пожалуйста, перейдите по ссылке ниже, если вы хотите узнать больше об otto:



А вот скрипт, который я использую для проверки регулярного выражения:

При запуске скрипта с некоторыми входными параметрами мы можем проверить так:

go run main.go -regex='^[\p{Hiragana}\p{Katakana}ー]{1,20}$' -input='ひらがな'
2022/10/28 17:47:21 [PASS][Golang] input: "ひらがな" regex: "^[\p{Hiragana}\p{Katakana}ー]{1,20}$"
2022/10/28 17:47:21 [FAIL][JavaScript] input: "ひらがな" regex: "^[\p{Hiragana}\p{Katakana}ー]{1,20}$"
2022/10/28 17:47:21 ### Found some failed check on a regex!! ###
exit status 1

Даааа работает! Затем мы используем код выше, чтобы проверить каждое регулярное выражение, которое у нас есть.

Закрытие

Эта реализация otto для этого случая — это всего лишь небольшой код. Так что, если вы хотите исследовать больше идей с помощью этой библиотеки, не стесняйтесь делать это!

По сути, вывод этого эксперимента таков: если нам нужно проверить какой-то код как для Golang, так и для JavaScript, мы можем легко использовать Golang и библиотеку для запуска кода JS в коде Golang.

Спасибо за чтение! Надеюсь, эта статья будет вам полезна!!