Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从字符串中查找城市和国家名称_Javascript_Node.js_Npm - Fatal编程技术网

Javascript 从字符串中查找城市和国家名称

Javascript 从字符串中查找城市和国家名称,javascript,node.js,npm,Javascript,Node.js,Npm,我有一个json文件中的城市和国家列表。对于给定的字符串,我需要检查城市名称和国家名称是否存在。如果有,我必须大写这个词。在节点JS中实现这一点的最佳方法是什么 请从这个链接中考虑JSON。 我的意见是“美国队将在布拉迪斯拉发打戴维斯杯” 输出应为“美国队将在布拉迪斯拉发打戴维斯杯” 提示:城市和国家名称的第一个字母应该是大写 我期待这样的代码 var myString="united states to play davis cup in bratislava"; var data=myjs

我有一个json文件中的城市和国家列表。对于给定的字符串,我需要检查城市名称和国家名称是否存在。如果有,我必须大写这个词。在节点JS中实现这一点的最佳方法是什么

请从这个链接中考虑JSON。

我的意见是“美国队将在布拉迪斯拉发打戴维斯杯”

输出应为“美国队将在布拉迪斯拉发打戴维斯杯”

提示:城市和国家名称的第一个字母应该是大写

我期待这样的代码

var myString="united states to play davis cup in bratislava";
var data=myjson;
var i=0;
myString=myString.split("");
for(i=0;i<myString.length;i++){
var output="";
//help this line
var check=myString[i].match(data)
if(check){
output+=myString[i].charAt(0).toUpperCase() + myString[i].slice(1);
}
else{
output+=myString[i]}
}
var myString=“美国队将在布拉迪斯拉发参加戴维斯杯”;
var data=myjson;
var i=0;
myString=myString.split(“”);

对于(i=0;i这一切都从底部的
函数start()
开始。为了显示,我使用了一个小数据集,但您可以使用
const data=require('data.json')
从json文件中获取数据。我也测试了大数据集,效果很好。希望能有所帮助

const数据={
“美国”:[
“华盛顿”、“布拉迪斯拉发”、“艰难”、“前进”],
“阿富汗”:[
“赫拉特”,
“喀布尔”,
“坎大哈”,
“摩拉”,
“拉娜”,
“沙尔”,
“谢里夫”,
“瓦齐尔·阿克巴·汗”
]};
Array.prototype.myJoin=函数(开始、结束){
如果(!start)start=0;
如果(!end)end=this.length-1;
end++;
返回此.slice(开始、结束);
};
常量getCityData=async(国家)=>{
返回国;
}
const changeFormat=async()=>{
试一试{
让国家=对象。键(数据)。地图((国家,索引)=>{
返回国;
})
让citiesData=[];
等待国家。地图((国家,索引)=>{
citiesData=citiesData.concat(数据[国家]);
})
返回国:concat(citiesData);
}捕捉(错误){
返回错误;
}
}
常量检查句子=(文本、文本、原始、数字、修改的数据)=>{
返回新承诺((解决、拒绝)=>{
试一试{
如果(!text | |!text.length){
抛出新错误(“空文本”);
}
//console.log('started'+编号);
//console.log('number'+number+'started')
让大写=[];
常数编号\u常数=编号;
设temp1=新数组(text.length);
temp1.填充(2);
temp1.map((v,i)=>{
//设temp=文本;
让temp=[…text_original,…[];
//console.log('i'+i);
//控制台日志('编号'+编号);
if(i+number){
//控制台日志(v);
设arr=范围(v.开始,v.结束)
toBeChanged=toBeChanged.concat(arr);
})
}
//控制台日志('结束编号'+编号);
//控制台日志(toBeChanged);
返回解析(toBeChanged);
}捕捉(错误){
退货拒绝(err);
//控制台错误(err);
//返回false;
}      
})
}
常数范围=(开始、结束)=>{
//console.log(启动);
//控制台日志(结束);
返回数组(end-start+1).fill().map((\ux,idx)=>start+idx)
}
const start=async()=>{
试一试{
excludeWords.map((单词,索引)=>{
excludeWords[index]=excludeWords[index].toLowerCase();
});
让modified_data_1=wait changeFormat();
设最大值=1;
修改后的数据=修改后的数据\u 1.map((v,i)=>{
如果(v.split('')。长度>最大值){
最大值=v.split('').长度
}
if(不包括words.indexOf(v.toLowerCase())=-1){
return v.toLowerCase();
}
});
text=text.split(“”);
如果(最大值>文本长度){
最大值=文本长度;
}
//控制台日志(最大值);
设温度=新阵列(最大值);
临时填充(2);
让答案=等待温度图((v,i)=>{
让tempArray=[…text,…[];
让tempArray1=[…text,…[];
返回校验语句(tempArray,tempArray1,(最大值-i),修改的_数据);
})
返回承诺。全部(回答)。然后((结果)=>{
让merged=[].concat.apply([],results);
//console.log('merged');
合并=新集合(合并);
合并=[…合并];
//console.log(合并);
合并的.map((v,i)=>{
如果(v==未定义| | v==空){
回来
}
设temp1=text[v]。拆分(“”);
temp1[0]=temp1[0].toUpperCase();
text[v]=temp1.join(“”);
})
//console.log(text.join(“”));
返回text.join(“”);
}).catch((错误)=>{
控制台日志(err);
})  
}捕捉(错误){
//console.error('hereerror');
控制台错误(err);
返回false;
}
}
让excludeWords=['Hard','Going'];
let text=‘美国队在布拉迪斯拉发队迎战戴维斯杯硬瓦齐尔·阿克巴尔·汗’;
(异步()=>{
让答案=等待开始();
控制台日志(应答);

})();
嗨,我用简单的方式做了,它也在工作。我的问题是字符串中的单词“davis”在json中也以城市的形式出现。如何不大写该单词。例如:“Hard”,“Going”这些单词也有城市名称。但在我的程序中,这些单词不被视为城市

案例1:

输入:台湾受非典疫情重创

产出应该是:台湾受到sars疫情的重创

我的输出:台湾受到非典疫情的重创

请安装大写npm并使用根文件夹中的data.json文件夹执行以下代码

var myData=require("./data");
var countriesArray=Object.keys(myData.data);
var citiesArray=Object.values(myData.data);
var capitalize=require('capitalize');
var citiesFlatten = [].concat.apply([], citiesArray);
var countryCities=countriesArray.concat(citiesFlatten);

var str = 'russia ponders space tourism deal';
var pattern = new RegExp("\\b("+countryCities.join("|")+")\\b","ig");
var matchArray=str.match(pattern);
if(!!matchArray){
    matchArray.forEach(function(item) {
        str=str.replace(item,capitalize.words(item));
    });
    console.log( str.replace(/^\w/, c => c.toUpperCase()));
}

你试过什么了吗?分享吧