Как использовать регулярное выражение для сопоставления ключа объекта и замены его значением?

Я все еще новичок в Javascript, и я не совсем уверен, как это сделать.

Я хочу, чтобы он соответствовал ключевому полю и заменил его своим значением.

const state = {
"NY": "New York"
}

Вы живете в Нью-Йорке к Ты живешь в нью йорке

Список со всеми состояниями будет довольно длинным, поэтому я думаю, что мне придется использовать объекты. Любая помощь будет оценена по достоинству! Заранее спасибо!

РЕДАКТИРОВАТЬ >>>

Большое спасибо тем, кто ответил! Я составил список всех штатов США, Канады и Мексики с их полным названием здесь: https://gist.github.com/PepperAddict/b8c6c80af4a17908fd98378b4375047e

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

Спасибо Спасибо спасибо!

Object.keys(state).forEach(k => str = str.replace(k, state[k]))
Ele 10.04.2018 17:05
You live in ${arrayOfStates['NY']}
Joe Warner 10.04.2018 17:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 553
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Регулярное выражение не нужно, используйте ключи из объекта state

Object.keys(state).forEach(k => str = str.replace(k, state[k]));

const state = { "NY": "New York" };
var str = "You live in NY";

Object.keys(state).forEach(k => str = str.replace(k, state[k]));
console.info(str);

Использование регулярного выражения для замены всего набора совпадений:

const state = { "NY": "New York" };
var str = "You live in NY and again in NY";

Object.keys(state).forEach(k => str = str.replace(new RegExp(`\\b${k}\\b`, 'g'), state[k]));
console.info(str);

Ух ты. Это прекрасно сработало !!! У меня было ощущение, что я слишком усложняю это. Спасибо!!!

PepperAddict 10.04.2018 17:13

Единственным недостатком здесь является то, что он будет работать только с одним экземпляром каждого состояния. Если он появляется более одного раза, более поздние экземпляры не будут заменены. Для этого вам понадобится цикл while или регулярное выражение

jmcgriz 10.04.2018 17:19

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

jmcgriz 10.04.2018 17:26

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

const state = {
"NY": "New York"
}
console.info(Object.keys(state).map(s => `You live in ${state[s]}`))

Если вы планируете сделать это, например, с пользователем


const state = {
"NY": "New York"
}
const user = {
 name: "joe",
 state: "NY",
 liveIn: () => `You live in ${state[user.state]}`
}
console.info(user.liveIn())

если вы уверены, что последнее слово - key. Затем вы можете пропустить для каждого, выполнив следующие действия.

const state = {
"NY": "New York"
}

var a = "You live in NY";

b = a.split(" ");

b = b[b.length - 1];


a.replace(b, state[b]);

Console.log(a); 

Выход

"You live in New York"

const states = {
  "CA": "California",
  "NY": "New York"
}

var input = "I'm from CA, thinking of moving to NY but not sure, I still really like CA."

var regexStr = Object.keys(states).join("|")
var statesRgx = new RegExp(`\\b(${regexStr})\\b`, 'g')
console.info(statesRgx)
function stateReplace(str){
  return str.replace(statesRgx, val => states[val])
}

console.info(stateReplace(input))

Другие вопросы по теме