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

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…


当前回答

你可以像这样使用正则表达式:

var arr = element.split(/_(.*)/)

您可以使用第二个参数,它指定分割的限制。 即: Var字段=元素。分割(' _ ',1)[1];

其他回答

你可以像这样使用正则表达式:

var arr = element.split(/_(.*)/)

您可以使用第二个参数,它指定分割的限制。 即: Var字段=元素。分割(' _ ',1)[1];

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

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

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

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

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

这里有一个RegExp可以完成这个任务。

'good_luck_buddy' . split(/^.*?_/)[1] 

首先,它迫使比赛从 从“^”开始。然后它匹配任何数字 换句话说,不是'_'的字符 所有字符在第一个“_”之前。

“?'表示最小字符数 使整个模式匹配的是 由'.*?“因为它是被遵循的 通过'_',然后包含在匹配中 作为最后一个角色。

因此split()使用这样的匹配 部分作为它的“分配器”,并将其从 结果。所以它删除了所有东西 直到并包括第一个“_”和 剩下的作为第二元素 结果。第一个元素是“”表示 匹配部分之前的部分。它是 “因为比赛从头开始。”

还有其他regexp作为 很像Chandu给出的/_(.*)/ 在之前的回答中。

/ ^ * ?_/对你有好处 能理解它没有什么吗 必须了解这个特殊角色 使用replace()捕获组。

我不惜一切代价避免RegExp。还有一件事你可以做:

"good_luck_buddy".split('_').slice(1).join('_')