Я использовал приведенную ниже формулу, чтобы удалить все пустое пространство до «и после», но без усилий.
var test_string = '{" 1 ": "b.) some pasta salad", " 10": " a.) Yes, some bread", "11 ": " a.) eggs and toast " }'
var test_string_format = test_string.replace(/^[ '"]+|[ '"]+$|( ){2,}/g,'$1')
console.info(test_string_format)
Как я могу использовать регулярное выражение для получения желаемого результата?
{"1":"b.) some pasta salad","10":"a.) Yes, some bread","11":"a.) eggs and toast" }
Замените ноль или более пробелов, за которыми следует кавычка, за которой следует ноль или более пробелов, только кавычкой:
replaceAll(/ *" */g, '"')
const test_string = '{" 1 ": "b.) some pasta salad", " 10": " a.) Yes, some bread", "11 ": " a.) eggs and toast " }'
const trimmed = test_string.replaceAll(/ *" */g, '"');
console.info(trimmed);
replaceAll
не будет работать во всех средах. Вместо этого используйте replace
console.info('{" 1 ": "b.) some pasta salad", " 10": " a.) Yes, some bread", "11 ": " a.) eggs and toast " }'
.replaceAll(/( *\" +)|( +\ *)/ig,'"'))
replaceAll
не будет работать во всех средах. Вместо этого используйте replace
Предполагая, что содержимое строки всегда допустимо в формате JSON, вы можете сделать это следующим образом:
var str = '{" 1 ": "b.) some pasta salad", " 10": " a.) Yes, some bread", "11 ": " a.) eggs and toast " }'
const res=JSON.stringify(Object.fromEntries(Object.entries(JSON.parse(str)).map(e=>e.map(e=>e.trim()))))
console.info(res)
Я знаю, это какое-то «глупое» решение, но оно работает для данной строки образца.
Фрагмент кода анализирует строку JSON, а затем преобразует полученный объект в массив массивов. Затем каждый элемент каждого подмассива подвергается .trim()-обработке, и в конце операции объект реконструируется с помощью .Object.fromEntries() и снова превращается в строку JSON с помощью JSON.stringify().
const test_string = '{" 1 ": "b.) some pasta salad", " 10": " a.) Yes, some bread", "11 ": " a.) eggs and toast " }';
const test_string_format = test_string.replace(/\s*"\s*/g, '"');
console.info(test_string_format);
\s
: соответствует любому символу пробела*
: соответствует нулю или более предыдущему символу (\s
)"
: соответствует символу двойной кавычкиconst regex = /(\s*["]\s*)/gm;
var test_string = = `{" 1 ": "b.) some pasta salad", " 10": " a.) Yes, some bread", "11 ": " a.) eggs and toast " }
`;
console.info(test_string.replace(regex, '"'))
Это работает, но вам не нужны: 1) группа захвата, 2) класс персонажа вокруг ", 3) модификатор m.
@CasimiretHippolyte Вы правы, модификатор m можно удалить. Насчет группировки и класса символов, я просто хотел сделать его более читабельным, но /\s*"\s*/g тоже работает.
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.