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

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…


当前回答

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]);

其他回答

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]);

Javascript的字符串。不幸的是,分割没有办法限制实际分割的数量。它有第二个参数,用于指定返回多少实际拆分项,这在您的示例中没有用处。解决方案是分割字符串,将第一项移开,然后重新连接其余的项:

var element = $(this).attr('class');
var parts = element.split('_');

parts.shift(); // removes the first item from the array
var field = parts.join('_');

你也可以使用非贪婪匹配,它只是一个简单的行:

A = "good_luck_buddy" Const [,g,b] = a.match(/(.*?)_(.*)/) console.log (g,“也”,b)

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

let raw = 'good_luck_buddy'

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

使用捕获括号:

'good_luck_buddy'.split(/_(.*)/s)
['good', 'luck_buddy', ''] // ignore the third element

它们被定义为

如果分隔符包含捕获括号,匹配的结果将在数组中返回。

在这个例子中,我们要在_处分割。*(即分割分隔符是以_开头的子字符串),但也让结果包含分隔符的一部分(即_之后的所有内容)。

在这个例子中,我们的分隔符(匹配_(.*))是_luck_buddy,捕获的组(在分隔符内)是lucky_buddy。如果没有捕获圆括号,luck_buddy (matching .*)将不会包含在结果数组中,因为它是简单分割的情况,分隔符不包括在结果中。

我们使用s regex标志来创建。匹配换行符(\n),否则它只会分割到第一个换行符。