如何在JavaScript中用多组关联数组将城市替换为对应国家?
JavaScript实现城市名替换为对应国家名的方案
需求说明
现有一段包含多个城市名的文本字符串,需要将其中的城市子串替换为对应的国家名称,示例如下:
原字符串:
const string = `I am living in London. I am living in Brighton. I am living in Birmingham. I am living in Paris. I am living in Lyon. I am living in Hamburg. I am living in Berlin. I am living in Münih.`
城市与国家对应关系:
- 德国城市:
Berlin,Hamburg,Bonn,Bochum,Bremen,Münih等 - 法国城市:
Lyon,Paris,Nice等 - 英国城市:
London,Brighton,Birmingham等
期望输出:
const newString = `I am living in England. I am living in England. I am living in England. I am living in France. I am living in France. I am living in Germany. I am living in Germany. I am living in Germany.`
实现思路
- 建立城市-国家映射:把分散的城市数组整合为键值对对象,键为城市名,值为对应国家名,实现快速查找。
- 生成匹配正则:将所有城市名用
|拼接成正则模式,开启全局匹配,确保文本中所有城市子串都能被匹配到。 - 执行替换操作:调用字符串的
replace()方法,通过回调函数根据匹配到的城市名,从映射中取出对应国家名完成替换。
完整代码实现
const string = `I am living in London. I am living in Brighton. I am living in Birmingham. I am living in Paris. I am living in Lyon. I am living in Hamburg. I am living in Berlin. I am living in Münih.`; // 修正原代码问题:城市名需以字符串形式定义 const citiesGermany = ['Berlin', 'Hamburg', 'Bonn', 'Bochum', 'Bremen', 'Münih']; const citiesFrance = ['Lyon', 'Paris', 'Nice']; const citiesEngland = ['London', 'Brighton', 'Birmingham']; // 构建城市-国家映射对象 const cityToCountry = {}; citiesGermany.forEach(city => cityToCountry[city] = 'Germany'); citiesFrance.forEach(city => cityToCountry[city] = 'France'); citiesEngland.forEach(city => cityToCountry[city] = 'England'); // 生成匹配所有城市的正则(若城市含特殊字符,需用RegExp.escape()转义) const cityRegex = new RegExp(Object.keys(cityToCountry).join('|'), 'g'); // 执行替换 const newString = string.replace(cityRegex, matchedCity => cityToCountry[matchedCity]); console.log(newString);
补充说明
- 原代码中的城市数组元素未加引号,会被JS识别为变量导致报错,实际开发中必须改为字符串形式。
- 如果城市名包含正则特殊字符(如
.、()),需用RegExp.escape()(ES2021+支持)或自定义转义函数处理,避免匹配异常。 - 若需要不区分大小写匹配,可在正则参数中添加
i(即'gi'),同时需统一映射对象键的大小写,或在回调中转换匹配结果的大小写。
内容的提问来源于stack exchange,提问作者JeremyFc
相关产品推荐
相关产品推荐

