Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在寻找从字符串中提取未知子字符串的最简单方法。(用斜杠分隔的术语)_Javascript_String_Substring - Fatal编程技术网

Javascript 正在寻找从字符串中提取未知子字符串的最简单方法。(用斜杠分隔的术语)

Javascript 正在寻找从字符串中提取未知子字符串的最简单方法。(用斜杠分隔的术语),javascript,string,substring,Javascript,String,Substring,初始字符串: initString='/digital/collection/music/bunch/of/other/stuff' 我想要什么:音乐 具体地说,我想要任何介于collection/和/bunch 我该怎么办: if(initString.includes('/digital/collection/')){ 让slicedString=initString.slice(19);//结果为“music/bunch/of/other/stuff” 让indexOfSlash=s

初始字符串:
initString='/digital/collection/music/bunch/of/other/stuff'

我想要什么:
音乐

  • 具体地说,我想要任何介于
    collection/
    /bunch
我该怎么办:

if(initString.includes('/digital/collection/')){
让slicedString=initString.slice(19);//结果为“music/bunch/of/other/stuff”
让indexOfSlash=slicedString.indexOf(“/”);//在本例中,结果为5
让desiredString=slicedString.slice(0,indexOfSlash);//结果为“music”
}
问题:
我该如何以更优雅的方式在javascript中实现这一点

  • 我寻找类似于
    endIndexOf()
    的东西来代替我的硬编码
    .slice(19)
    • lastIndexOf()
      不是我要找的,因为我希望索引位于子字符串的第一个实例的末尾
      /digital/collection/
  • 我希望减少行数,但找不到类似于
    .getStringBevering('beginCutoff,EndCuttoff')的代码。

提前谢谢你

如果路径始终相同,并且所需字段位于第三个
/
之后,则可以使用split

var initString = '/digital/collection/music/bunch/of/other/stuff';
var collection = initString.split("/")[2]; // third index
在现实世界中,在使用索引之前,首先要检查它是否存在

var collections = initString.split("/");
var collection = "";
if (collections.length > 2) {
    collection = collections[2];
}

您可以使用
constdesiredstring=initString.slice(19,24)如果你一直在寻找音乐。

从逻辑上考虑这个问题:“结束索引”只是“开始索引”加上子字符串的长度,对吗?所以这样做:)


从子字符串的结尾到整个字符串的结尾;您始终可以在
/
处拆分,并使用索引0从剩余的目录名中仅获取第一个目录名。

如果您需要查找“/digital/collection/”之后的下一个路径参数,而不管“/digital/collection/”位于路径中的何处

  • 首先使用split获取路径数组
  • 然后使用find返回前两个元素分别为digital和collection的元素
  • const initString='/digital/collection/music/bunch/of/other/stuff'
    常量pathArray=initString.split(“/”)
    常量路径=pathArray.length>=3
    ? pathArray.find((elm,index)=>pathArray[index-2]==='digital'和&pathArray[index-1]=='collection')
    :“路径太短”
    
    console.log(path)
    也可以使用正则表达式

    const initString='/digital/collection/music/bunch/of/other/stuff';
    const result=initString.match(/\/digital\/collection\/([a-zA-Z]+)\/)[1];
    控制台日志(结果);
    
    控制台输出为:

    音乐

    您的标题是“index”,但您的示例显示您想要返回字符串。如果实际上您想要返回字符串,请尝试以下操作:

    if(initString.includes('/digital/collection/')) {
        var components = initString.split('/');
        return components[3]; 
    }
    

    如果您知道初始字符串,并且在您搜索的字符串之前有一部分,那么下面的代码段将返回您搜索的字符串。你不需要计算指数,或者类似的东西

    //获取searchString的最后一个索引
    //我们应该得到:音乐
    const initString='/digital/collection/music/bunch/of/other/stuff'
    const firstPart='/digital/collection/'
    常量lastIndexOf=(s1,s2)=>{
    返回s1。替换(s2),。拆分('/')[0]
    }
    
    console.log(lastIndexOf(initString,firstPart))
    请询问您想要得到什么(音乐?、索引?)以及原因。音乐所在的术语将发生变化,可能还包括数字,因此很遗憾,这不起作用。。谢谢你!这正是我想要的,尽管我相信您需要
    .split('/')[3]
    。(第四个索引)。我在
    /digital/collection/music/bunch
    上使用第三个索引进行了测试,结果是
    收藏
    。非常感谢你!!!谢谢你纠正我!你说得对,因为我肯定在找绳子。我已经编辑了标题以适合这个问题。
    if(initString.includes('/digital/collection/')) {
        var components = initString.split('/');
        return components[3]; 
    }