我正在尝试编写一种方法,将该字符串分成两个单独的变量。城市名称可以是一个或多个单词,并且州将始终紧随城市名称中的最后一个单词。
var splitFlightInfo = "LOS ANGELES CA MIAMI FL"
var temp;
var theFlightInfo = splitFlightInfo.shift().split(" ");
var theflightDate = theFlightInfo.shift();
var theFlightArrive = theFlightInfo.pop();
var theFlightDepart = theFlightInfo.pop();
var theFlightPorts = splitFlightInfo.shift();
for(var p = 0; p < theFlightInfo.length; p++){
if(p === 0){
temp = theFlightInfo[p];
} else{
temp += ' '+theFlightInfo[p];
}
}
预期结果:
var departPort = "Los Angeles, CA"
var arrivePort = "Miami, FL"
实际结果:无
答案 0 :(得分:1)
您可以使用
匹配这些字符串/.*?\b[A-Z]{2}\b/g
请参见regex demo。
注意:如果要精确匹配美国各州,可以将[A-Z]{2}
替换为(?:AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)
:
/.*?\b(?:AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)\b/g
模式详细信息
.*?
-除换行符之外的任何0+个字符都应尽可能少\b[A-Z]{2}\b
-由两个大写字母组成的整个单词。然后,使用.replace(/\s+\S+$/, ',$&')
在最后1+个空格和1+个非密钥之间添加逗号。
JS演示:
var regex = /.*?\b[A-Z]{2}\b/g;
var str = "LOS ANGELES CA MIAMI FL";
var res = str.match(regex);
console.log(res[0].trim().replace(/\s+\S+$/, ',$&'));
console.log(res[1].trim().replace(/\s+\S+$/, ',$&'));