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

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…


当前回答

这应该很快

函数splitOnFirst (str, sep) { const index = str.indexOf(sep); 返回索引< 0 ?[str]: [str.slice(0, index), str.slice(index + sep.length)]; } console.log (splitOnFirst(“good_luck”、“_”)[1]) console.log (splitOnFirst(“good_luck_buddy”、“_”)[1])

其他回答

你需要正则表达式和数组做什么?

myString = myString.substring(myString.indexOf('_')+1)

你好! 我的弦=我的弦。 控制台日志(myString)。

在解构赋值的帮助下,它可以更易于阅读:

let [first, ...rest] = "good_luck_buddy".split('_')
rest = rest.join('_')

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

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

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

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

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

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

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

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('_')], [])