仅在指定字符的第一个实例上拆分string

在我的代码中,我根据_分割一个string,并获取数组中的第二个项目。

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

good_luck并为我提供luck 。 太棒了!

但是,现在我有一个类似good_luck_buddy的类。 我怎么让我的JavaScript忽略第二个_并给我luck_buddy

我发现这个var field = element.split(new char [] {'_'}, 2); 在交stream#stackoverflow答案,但它不工作。 我在jsFiddle试过了…

使用捕获括号 :

 "good_luck_buddy".split(/_(.+)/)[1] "luck_buddy" 

他们被定义为

如果separator包含捕获括号,则匹配结果将返回到数组中。

所以在这种情况下,我们希望在_.+ (即split分隔符是以_开头的子string)分割, 而且让结果包含我们分隔符的一部分(即_之后的所有内容 )。

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

你需要什么正则expression式和数组?

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

我不惜一切代价避免RegExp。 这是另一件你可以做的事情:

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

将第一个实例replace为一个唯一的占位符,然后从那里分割。

 "good_luck_buddy".replace(/\_/,'&').split('&') ["good","luck_buddy"] 

当需要拆分的双方时,这更有用。

您可以使用正则expression式,如:

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

您可以使用第二个参数来指定分割的限制。 即:var field = element.split('_',1)[1];

不幸的是,Javascript的String.split无法限制实际的分割数量。 它有第二个参数,指定有多less实际的分割项返回,这在你的情况下是没有用的。 解决的办法是分割string,closures第一个项目,然后重新join剩下的项目::

 var element = $(this).attr('class'); var parts = element.split('_'); parts.shift(); // removes the first item from the array var field = parts.join('_'); 

马克F的解决scheme是真棒,但它不被旧的浏览器支持。 肯尼贝克的解决scheme是真棒,并支持旧的浏览器,但不支持正则expression式。

所以,如果你正在寻找一种解决scheme,只分裂你的string一次,这是旧的浏览器支持,并支持正则expression式,这是我的解决scheme:

 String.prototype.splitOnce = function(regex) { var match = this.match(regex); if(match) { var match_i = this.indexOf(match[0]); return [this.substring(0, match_i), this.substring(match_i + match[0].length)]; } else { return [this, ""]; } } var str = "something/////another thing///again"; alert(str.splitOnce(/\/+/)[1]); 

对于像我这样不习惯正则expression式的初学者,这个解决方法解决scheme工作:

  var field = "Good_Luck_Buddy"; var newString = field.slice( field.indexOf("_")+1 ); 

slice()方法提取一个string的一部分,并返回一个新的string,indexOf()方法返回一个string中第一个find的指定值的位置。

这在Chrome + FF上适用于我:

 "foo=bar=beer".split(/^[^=]+=/)[1] // "bar=beer" "foo==".split(/^[^=]+=/)[1] // "=" "foo=".split(/^[^=]+=/)[1] // "" "foo".split(/^[^=]+=/)[1] // undefined 

如果你还需要这个键,试试这个:

 "foo=bar=beer".split(/^([^=]+)=/) // Array [ "", "foo", "bar=beer" ] "foo==".split(/^([^=]+)=/) // [ "", "foo", "=" ] "foo=".split(/^([^=]+)=/) // [ "", "foo", "" ] "foo".split(/^([^=]+)=/) // [ "foo" ] //[0] = ignored (holds the string when there's no =, empty otherwise) //[1] = hold the key (if any) //[2] = hold the value (if any)