Javascript — преобразование строки с комментариями в объект

#javascript #string #object

#javascript #строка #объект

Вопрос:

как я могу изменить следующую строку на объект?


 "password: {
  minLength: 8, // some comments
  maxLength: 24,
  strong: (value) => /.*[^0-9] .*[0-9] .*|.*[0-9] .*[^0-9] .*/.test(value),
},"
 

Комментарии:

1. Откуда вы берете эту строку? Вы можете использовать eval , но это безопасно, только если вы управляете этой строкой, а не пользователем.

Ответ №1:

Если — и только если — эта строка находится под вашим контролем, а не пользователя вашего приложения, вы можете использовать eval . Обратите внимание, что необходимы некоторые изменения, поскольку содержимое строки не представляет допустимый JavaScript, похоже, что это объект со password свойством, но окружающие фигурные скобки отсутствуют.

Итак, вот как это может работать:

 let input = `password: {
  minLength: 8, // some comments
  maxLength: 24,
  strong: (value) => /.*[^0-9] .*[0-9] .*|.*[0-9] .*[^0-9] .*/.test(value),
},`;

// Add braces to make it a valid object literal, and
// add parentheses to make it into an expression:
let result = eval(`({${input}})`);
console.log(result); 

ПРИМЕЧАНИЕ: вы не можете использовать JSON.parse здесь, так как эта строка не является допустимым JSON, и JSON не поддерживает синтаксис функции.

Однако, если строка предоставлена пользователем, вам не следует использовать eval . Вы можете даже задаться вопросом, следует ли вам поддерживать синтаксический анализ такого пользовательского ввода, поскольку он может выполнить код, который вы на самом деле не хотите, чтобы он выполнялся.