给出一个字符串:
address = "Tomorrowland, Orlando, FL 32836, USA"
为了摆脱邮政编码和国家/地区,您如何删除超过第二个逗号的特定长度的所有字符串? (输出如下所示)
"Tomorrowland, Orlando, FL"
我知道您可以使用粗暴的表单解决方案,例如
for(var i = 0; i<address.length;i++){
if(address[i] == ','){
var number = i+3;
}
//get rid of everything past address[number]
}
但这似乎不太理想。
答案 0 :(得分:1)
使用限制为3的split,然后加入然后删除尾随邮政编码
let addresses = ["Tomorrowland, Orlando, FL 32836, USA", "Tomorrowland 05, Orlando, FL 32836, USA", "Tomorrowland, Orlando, FL 32836, USA, The World"]
addresses.forEach(address => {
console.log(address.split(',', 3).join(',').replace(/[0-9\-\s]+$/g, ''))
})
答案 1 :(得分:1)
按空格分割地址并将结果的前三个元素连接在一起
let address = "Tomorrowland, Orlando, FL 32836, USA"
let result = address.split(' ', 3).join(' ');
console.log(result)
答案 2 :(得分:1)
如果地址中的唯一数字出现在ZipCode中,您可以使用JavaScript中的RegEx函数,例如string.match(regex)
let address = "Tomorrowland, Orlando, FL 32836, USA"
truncated_addr = address.match(/^\w[^0-9]+/);
console.log(truncated_addr[0]);
&#13;
答案 3 :(得分:1)
使用RegExp replace()
方法:
/\s\d.*/g or /\s[0-9]{5}-?[0-9]{0,4}.*/g
/
开始正则表达式
\s
一个空白
\d{5}
连续5个号码
\D
任何非数字字符
*
零次或多次
/
结束正则表达式
g
全局标记(在第一次匹配后,它将一直持续到行尾)
如果您可能有或没有查找代码,则第二个更详细的版本。
[0-9]{5}
连续5个号码。
-?
表示零或一个连字符
[0-9]{0,4}
零至4个连续数字
\D*
任意数量的任何非数字字符。
replace()
会找到一个匹配项,并将其替换为''
(2个连续引号)。
var address0 = "Tomorrowland, Orlando, FL 32836, USA";
var address1 = "Tomorrowland, Orlando, FL 32836-6145, USA";
var str0 = address0.replace(/\s\d{5}\D*/g, '');
var str1 = address1.replace(/\s[0-9]{5}-?[0-9]{0,4}\D*/g, '');
console.log(str0);
console.log(str1);