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

IT技术 javascript jquery regex
2021-01-20 12:23:33

在我的代码中,我拆分了一个字符串_并抓取了数组中的第二个项目。

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);在 ac# stackoverflow answer 中找到了这个,但它不起作用。我在 jsFiddle 上试过了...

6个回答

使用捕获括号

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

它们被定义为

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

因此,在这种情况下,我们希望拆分 at _.+(即拆分分隔符是一个以 开头的子字符串_),但也让结果包含我们的分隔符的某些部分(即之后的所有内容_)。

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

十分优雅。奇迹般有效。谢谢你。
2021-03-23 12:23:33
需要明确的是,这个解决方案之所以有效,是因为第一个之后的所有内容都在_捕获组内匹配,并因此被添加到令牌列表中。
2021-03-29 12:23:33
任何人都知道为什么我会得到一个额外的空字符串元素:in:"Aspect Ratio: 16:9".split(/:(.+)/)out:["Aspect Ratio", " 16:9", ""]
2021-03-29 12:23:33
@katylavallee - 这可能有帮助:stackoverflow.com/questions/12836062/...由于分隔符是": 16:9",分隔符后没有任何内容,因此在末尾创建空字符串。
2021-04-02 12:23:33
您甚至不需要 (?),只需使用 /_(.+)/ 在第一个 _ 之后再捕获 1 个字符
2021-04-03 12:23:33

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

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

var myString= "hello_there_how_are_you"
myString = myString.substring(myString.indexOf('_')+1)
console.log(myString)

@PeterLeger 让分裂 =[ string.substring(0, string.indexOf(options.divider)), string.substring(string.indexOf(options.divider) + 1) ]你有它。也有可变针的支持
2021-03-18 12:23:33
这就是天才!
2021-03-24 12:23:33
答案输出字符串的第二部分。如果你也想要第一部分怎么办?var str = "good_luck_buddy", res = str.split(/_(.+)/);您一起获得所有零件:console.log(res[0]); console.log(res[1]);
2021-04-04 12:23:33
字符串 !== 字符串。javascript 区分大小写。
2021-04-08 12:23:33
我认为这是最好的答案。也可以_通过编写一秒后获取字符串myString.substring( myString.indexOf('_', myString().indexOf('_') + 1) + 1 )
2021-04-09 12:23:33

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

"good_luck_buddy".split('_').slice(1).join('_')
@yonas 服用红色药丸!
2021-03-13 12:23:33
哈!我在 4 多年前写了这条评论。我现在绝对支持 RegExp!:)
2021-03-16 12:23:33
@yonas你最好不要。您需要时,RegExp 非常棒不是这里的情况。检查更新的测试:jsperf.com/split-by-first-colon/2
2021-03-25 12:23:33
@yonas 是的,服用红色药丸!它会让你的生活更快,即使是短字符串:jsperf.com/split-by-first-colon
2021-04-02 12:23:33
害怕 RegExp 的人永远不会知道 RegExp 有多棒。你需要自己找到门。一旦你在那里,你将永远不会回头。几年后再问我,你会告诉我它有多棒。
2021-04-05 12:23:33

在解构赋值的帮助下,它可以更具可读性:

let [first, ...rest] = "good_luck_buddy".split('_')
rest = rest.join('_')
嗯,如何完美取决于rest多少分隔符
2021-03-14 12:23:33
ES6 的最佳答案
2021-03-17 12:23:33
超级有用而且非常灵活。
2021-04-11 12:23:33

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

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