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

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…


当前回答

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

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

其他回答

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

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

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

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

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

我需要字符串的两个部分,所以,regex lookbehind帮助我这个。

const full_name = 'Maria do Bairro'; Const [first_name, last_name] = full_name.split(/(?<=^[^]+) /); console.log (first_name); console.log (last_name);

使用捕获括号:

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

它们被定义为

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

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

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

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

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

let raw = 'good_luck_buddy'

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