繁体   English   中英

基于符号拆分字符串

[英]split string based on a symbol

我正在尝试根据符号_的第二次出现将字符串拆分为数组

var string = "this_is_my_string";

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

在上面的示例字符串中,我需要像这样拆分它。

var split = [this_is, _my_string];
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。

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函数的结果是以完全匹配区域开始的数组,后跟两个捕获的组。

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

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

这应该工作。

我知道这篇文章很老了......但是不禁注意到没有人提供有效的解决方案。 这是一个有效的:

    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”会在第二次出现后返回所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM