我将如何使用javascript将带有两个城市(及其州)的字符串分成各自的变量?

时间:2019-06-20 15:01:50

标签: javascript regex

我正在尝试编写一种方法,将该字符串分成两个单独的变量。城市名称可以是一个或多个单词,并且州将始终紧随城市名称中的最后一个单词。

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"

实际结果:无

1 个答案:

答案 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+$/, ',$&'));