基于一个符号来分割字符串

3

我想要将一个字符串根据第二个出现的符号_拆分成数组。

var string = "this_is_my_string";

我想在第二个下划线后拆分字符串。字符串不总是相同的,但它总是有2个或更多的下划线。我总是需要在第二个下划线上拆分。

在上面的示例字符串中,我需要按以下方式拆分。

var split = [this_is, _my_string];
4个回答

7
var string = "this_is_my_string";
var firstUnderscore = string.indexOf('_');
var secondUnderscore = string.indexOf('_', firstUnderscore + 1);
var split = [string.substring(0, secondUnderscore),
             string.substring(secondUnderscore)];

将它粘贴到浏览器控制台中尝试。无需使用jsFiddle。

这只适用于他们的示例,对于一个更长的字符串,比如 a_b_c_d_e_f = [a_b,c_d,e_f] 的解决方案呢? - Ash Burlaczenko
2
事实上,很明显它并不是:“字符串并不总是相同的,但它总是有2个或更多的下划线。我总是需要在第二个下划线处将其分割。” - Amadan

2
var str = "this_is_my_string";

var matches = str.match(/(.*?_.*?)(_.*)/); // MAGIC HAPPENS HERE

var firstPart = matches[1];  // this_is
var secondPart = matches[2]; // _my_string

这个使用正则表达式来查找前两个下划线,并捕获它之前和之后的部分。第一个子表达式(.*?_.*?)表示“任意数量的字符、下划线,再次任意数量的字符,尽可能匹配少的字符,并捕获它”。第二个子表达式(_.*)表示“匹配一个下划线,然后任意数量的字符,尽可能多地匹配它们,并捕获它”。match函数的结果是一个数组,以完整匹配的区域开头,后面跟着两个捕获的组。


2
对于一个旨在向人们解释编程问题的网站来说,“MAGIC HAPPENS HERE”并不是有帮助的... - lonesomeday
1
你是对的,表述很糟糕。它不是为了模糊,而只是为了指出实际答案所在的行,其余部分都是无关紧要的。我将展开说明它实际上是做什么的。 - Amadan

2
var string = "this_is_my_string"; 
var splitChar = string.indexOf('_', string.indexOf('_') + 1);

var result = [string.substring(0, splitChar),
string.substring(splitChar, string.length)];

这应该可以正常工作。


1
这与我的答案完全等价。 - Matt Ball
1
你说得对,我没有注意到你已经发布了它。干得好! - Masiar

1

我知道这篇帖子很旧了...但是我忍不住注意到没有人提供一个可行的解决方案。这里有一个可行的解决方案:

    String str = "this_is_my_string";
    String undScore1 = str.split("_")[0];
    String undScore2 = str.split("_")[1];
    String bothUndScores = undScore1 + "_" + undScore2 + "_";
    String allElse = str.split(bothUndScores)[1];
    System.out.println(allElse);

假设您知道至少会有2个下划线,"allElse"返回第二次出现后的所有内容。


欢迎来到SO。很好的回答! - DWright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接