仅在指定字符的第一个实例上拆分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)