如何拆分一个字符串,在特定字符处断开?

633

我有这个字符串

'john smith~123 Street~Apt 4~New York~NY~12345'

使用JavaScript,将其解析成最快的方法是什么?

var name = "john smith";
var street= "123 Street";
//etc...
17个回答

989

使用 JavaScript 的 String.prototype.split 函数:

var input = 'john smith~123 Street~Apt 4~New York~NY~12345';

var fields = input.split('~');

var name = fields[0];
var street = fields[1];
// etc.

95
根据ECMAScript6(ES6)标准,清晰的方式是使用解构数组:

根据ECMAScript6(ES6)标准,清晰的方式是使用解构数组:

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';

const [name, street, unit, city, state, zip] = input.split('~');

console.log(name); // john smith
console.log(street); // 123 Street
console.log(unit); // Apt 4
console.log(city); // New York
console.log(state); // NY
console.log(zip); // 12345

您在输入字符串中可能会有额外的项目。在这种情况下,您可以使用剩余操作符获取其余部分的数组,或者只是忽略它们:

您可以使用剩余操作符获取其余部分的数组,或者只是忽略它们:

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';

const [name, street, ...others] = input.split('~');

console.log(name); // john smith
console.log(street); // 123 Street
console.log(others); // ["Apt 4", "New York", "NY", "12345"]

我假设值是只读引用,并使用了 const 声明。

享受 ES6!


11
你也可以跳过一个元素:const [name, , unit, ...others] = ... - Sallar

55

您不需要使用jQuery。

var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];

console.log(name);
console.log(street);


65
这个简单的替换不需要添加正则表达式,反而会使它变慢。你可以将其改为引号来进行简单字符串替换。 - Anish Gupta

17

尽管这不是最简单的方法,但你可以这样做:

var addressString = "~john smith~123 Street~Apt 4~New York~NY~12345~",
    keys = "name address1 address2 city state zipcode".split(" "),
    address = {};

// clean up the string with the first replace
// "abuse" the second replace to map the keys to the matches
addressString.replace(/^~|~$/g).replace(/[^~]+/g, function(match){
    address[ keys.unshift() ] = match;
});

// address will contain the mapped result
address = {
    address1: "123 Street"
    address2: "Apt 4"
    city: "New York"
    name: "john smith"
    state: "NY"
    zipcode: "12345"
}

使用解构语法的ES2015更新

const [address1, address2, city, name, state, zipcode] = addressString.match(/[^~]+/g);

// The variables defined above now contain the appropriate information:

console.log(address1, address2, city, name, state, zipcode);
// -> john smith 123 Street Apt 4 New York NY 12345

4
首先,我们有一个由“”符号分隔的字符串和一个keys数组。第二个替换函数使用`[^]+`匹配每个不同的部分(即'123 Street'、'Apt 4'等),并对每个部分调用函数,将其作为参数传递。在每次运行时,该函数从keys数组中获取第一个键(同时使用Array.unshift删除它),并将键和部分分配给地址对象。 - ewino

14

您需要查看JavaScript的substrsplit,因为这并不是适合使用jQuery完成的任务。


substr现在已经被弃用,建议使用substring() [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substring]。 - Sashini Hettiarachchi

8
如果找到分隔符,则只会对其进行分割,否则返回相同的字符串。
function SplitTheString(ResultStr) {
    if (ResultStr != null) {
        var SplitChars = '~';
        if (ResultStr.indexOf(SplitChars) >= 0) {
            var DtlStr = ResultStr.split(SplitChars);
            var name  = DtlStr[0];
            var street = DtlStr[1];
        }
    }
}

7

split()方法在JavaScript中用于将字符串转换为数组。它有一个可选参数,即分隔符,用于拆分字符串。在您的情况下,分隔符为(~)。

如果省略了分隔符,则会将字符串简单地放在数组的第0个位置。

如果分隔符只是一个“”,则会将其转换为单个字符的数组。

所以在您的案例中:

var arr = input.split('~');

将会在 arr[0] 获取名称,以及在 arr[1] 获取街道。

您可以阅读JavaScript 中的 split() 方法以获取更详细的解释。


5

好的,最简单的方法可能是这样的:

var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]

5

您可以使用split函数来分割文本。

或者,您也可以使用以下方式来使用match函数:

var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);

console.log(matches);
document.write(matches);

正则表达式 [^~]+ 会匹配除了 ~ 以外的所有字符,并将匹配结果返回为一个数组。然后您可以从中提取匹配项。

1
这对我有用!str.split();在Firefox中无法工作,但在Chrome和Firefox中都可以工作。 - Sandeep
1
@Sandeep,不, str.split(); 在Firefox和所有主要浏览器中都可以使用(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)。 - Andrew Willems

3

类似以下内容:

var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];

可能是最简单的。

3
дёҚпјҢдҪ йңҖиҰҒдҪҝз”Ё split("~") жҲ–иҖ… split(/~/) иҖҢдёҚжҳҜ split("/~/")гҖӮеҗҺиҖ…еҸӘдјҡе°Ҷ "John/~/Smith" еҲҶеүІејҖиҖҢдёҚжҳҜ "John~Smith"гҖӮ - Andrew Willems

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接