在我的代码中,我基于_分割字符串并获取数组中的第二项。

var element = $(this).attr('class');
var field = element.split('_')[1];

带来好运,给我带来好运。工作好了!

但是,现在我有了一个看起来像good_luck_buddy的类。我如何让我的javascript忽略第二个_,给我luck_buddy?

我找到了var field = element。Split (new char [] {'_'}, 2);在c# stackoverflow中回答,但它不起作用。我尝试在jsFiddle…


当前回答

现在String.prototype.split确实允许你限制分割的数量。

str.split([分隔符[,限制]]) ... 限制可选 限制分割次数的非负整数。如果提供,则在指定分隔符的每个出现处拆分字符串,但在数组中已放入限制项时停止。数组中根本不包括任何剩余文本。 如果在达到限制之前到达字符串的末尾,则数组包含的条目可能少于限制。 如果limit为0,则不进行拆分。

警告

它可能不会像你期望的那样工作。我希望它只是忽略其余的分隔符,但相反,当它达到限制时,它再次分割剩余的字符串,从返回结果中省略分割后的部分。

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C"]

我希望:

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B_C_D_E"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C_D_E"]

其他回答

使用字符串replace()方法与一个正则表达式:

Var result = "good_luck_buddy".replace(/.*?_ /”、“); console.log(结果);

这个正则表达式匹配第一个_之前的0个或更多字符,以及_本身。然后将匹配项替换为空字符串。

现在String.prototype.split确实允许你限制分割的数量。

str.split([分隔符[,限制]]) ... 限制可选 限制分割次数的非负整数。如果提供,则在指定分隔符的每个出现处拆分字符串,但在数组中已放入限制项时停止。数组中根本不包括任何剩余文本。 如果在达到限制之前到达字符串的末尾,则数组包含的条目可能少于限制。 如果limit为0,则不进行拆分。

警告

它可能不会像你期望的那样工作。我希望它只是忽略其余的分隔符,但相反,当它达到限制时,它再次分割剩余的字符串,从返回结果中省略分割后的部分。

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C"]

我希望:

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B_C_D_E"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C_D_E"]

Mark F的解决方案很棒,但旧的浏览器不支持。Kennebec的解决方案很棒,老浏览器也支持,但不支持regex。

所以,如果你正在寻找一个解决方案,只分割你的字符串一次,这是由旧浏览器支持和支持regex,这是我的解决方案:

String.prototype.splitOnce = function(正则表达式) { Var match = this.match(正则表达式); 如果(匹配) { var match = this.indexOf(match[0]); [这返回。substring (0, match_i), 这一点。Substring (match_i + match[0].length)]; } 其他的 {返回[这个,""];} } Var STR = "某事/////另一件事///再次"; 警报(str.splitOnce (/ \ / + /) [1]);

一个简单的es6一条语句解决方案来获得第一个键和其余部分

let raw = 'good_luck_buddy'

raw.split('_')
   .reduce((p, c, i) => i === 0 ? [c] : [p[0], [...p.slice(1), c].join('_')], [])

ES6中获取字符串中第一个键和其余部分的简单方法是:

 const [key, ...rest] = "good_luck_buddy".split('_')
 const value = rest.join('_')
 console.log(key, value) // good, luck_buddy