регулярное выражение машинописного текста совпадает, даже если одна часть совпадает

#regex #typescript

Вопрос:

 lt;lt;EOH  bind_port: {[ env "NOMAD_PORT_db" ]}  scratch_dir: {[ env "NOMAD_TASK_DIR" ]}  node_id: {[ key "node.unique.id" ]}  service_key: {[ key "service/my-key" ]} EOH  

у меня есть часть кода формы, в которой я принимаю данные, введенные пользователем, как указано выше. Мне нужно сделать одно подтверждение. Пользователь не должен звонить {{ key .... }} , вместо этого они должны использовать {{ env .... }} .

 {[s ?keys ?". ?"s ?]}  

Это регулярное выражение, которое я придумал, оно должно получить хотя бы одно совпадение. На стороне сценария типа, как мне добавить это в свой код. где я могу сделать что-то вроде

  1. соответствие регулярному выражению
  2. найдено по крайней мере одно совпадение
  3. Возврат
  4. совпадений не найдено
  5. проходить.

Я попробовал это на стороне кода.

 const matches = value.matchAll(new RegExp('{[s ?keys ?". ?"s ?]}', "g"));  for (const match of matches) {  console.log(match);  return createError({ message: "use {[ env .. ]} instead of {[ key .. ]}" });  }  

похоже, это не работает

Ответ №1:

Вы можете использовать RegExp#test и использовать настроенное регулярное выражение, например

 /{[s*keys*"[^"]*"s*]}/  

Обратите внимание на отсутствие g флага, и ленивые кванторы заменяются жадными для повышения производительности. s ? соответствует по крайней мере одному пробелу, но я предполагаю, что пробелы также могут отсутствовать, поэтому я превратил их в s* (ноль или более пробелов).

Поскольку это регулярное выражение, соответствующее нежелательному шаблону, RegExp#test результат должен быть отменен ! перед вызовом функции.

Смотрите демонстрацию JavaScript:

 const text = `bind_port: {[ env "NOMAD_PORT_db" ]} scratch_dir: {[ env "NOMAD_TASK_DIR" ]} node_id: {[ key "node.unique.id" ]} service_key: {[ key "service/my-key" ]}`; const re = /{[s*keys*"[^"]*"s*]}/; if (!re.test(text)) {  console.log("Valid!"); // Return true here if you use it in a function } else {  console.log("use {[ env .. ]} instead of {[ key .. ]}"); }