действительный JSON не создан с регулярным выражением в качестве значения - PullRequest
0 голосов
/ 03 октября 2019

У меня есть действительное регулярное выражение

(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+

Это доступно на и может быть проверено на https://www.regextester.com/94502

Теперь я пытаюсь создать JSON, в котором используется выражение вышекак значение.

{
    "regex": "^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$"
}

Это можно проверить на https://jsonlint.com/

Оказывается, недопустимый JSON. Что не так с вышеуказанным JSON?

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Строка в кавычках справа от "regex": содержит последовательности символов

    \.  \w  \]  \+   \(   \)

, и каждая из них недопустима в строке JSON - см. Краткое описание http://json.org/ и "визуальное "объяснение грамматики.

Чтобы представить данное регулярное выражение в качестве допустимой строки JSON, каждый обратный слеш должен быть удвоен (то есть заменить \ на \\, так же, как в других языках, таких как PHP, C/ C ++ и т. Д.), Поэтому соответствующая строка должна выглядеть примерно так:

  "regex": "^(?:http(s)?:\\/\\/)?[\\w.-]+   ...
0 голосов
/ 03 октября 2019

Специальные символы должны быть экранированы в соответствии с http://www.json.com. И вам не нужно пробивать одинарные кавычки ', но использование одинарных кавычек - плохая практика. Для новых читателей, пожалуйста, используйте двойные кавычки, это позволит вам избавиться от многих головных болей.

\b  Backspace (ASCII code 08)
\f  Form feed (ASCII code 0C)
\n  Newline
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character

Todo:

Изменить одиночную кавычку надвойная кавычка.

Примените приведенные выше символы для экранирования специальных символов.

Надеюсь, это решит вашу проблему. Хорошего дня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...