Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 - Fatal编程技术网

Javascript 如何检索从特定字符串开始到最后一个字符数组的字符

Javascript 如何检索从特定字符串开始到最后一个字符数组的字符,javascript,Javascript,第1行:10016/Documents/abc.pdf 第二行:10016-10017/10017/Documents/folder1/folder2/xyz.pdf 我试图检索从/Documents开始但没有最后一部分(文件名)的所有字符 在第1行中,我想检索/Documents/ 在第2行中,我想检索/Documents/folder1/folder2/ 我试过了 var temp1 = FullPath.split("/Documents/")[0]; var A_F

第1行:
10016/Documents/abc.pdf

第二行:
10016-10017/10017/Documents/folder1/folder2/xyz.pdf

我试图检索从/Documents开始但没有最后一部分(文件名)的所有字符

在第1行中,我想检索
/Documents/

在第2行中,我想检索
/Documents/folder1/folder2/

我试过了

var temp1 = FullPath.split("/Documents/")[0];

var A_Fpath = temp1.split("/");

A_Fpath = A_Fpath[A_Fpath.length - 1];

一个简单的正则表达式就可以做到这一点:

/\/文档*\//
/启动正则表达式
\/按字面意思匹配“/”(\是转义/保留字符)
文档字面上与单词“Documents”(区分大小写)匹配
.*匹配0个或多个字符(任意字符)
\/按字面意思匹配“/”
/结束正则表达式
这是因为正则表达式将尝试匹配最长的字符串
与正则表达式匹配的字符数。
const row1=“10016/Documents/abc.pdf”;
const row2=“10016-10017/10017/Documents/folder1/folder2/xyz.pdf”;
const regex=/\/Documents.*\/;
const val1=row1.match(regex)[0];
const val2=row2.match(regex)[0];
控制台日志(val1);

log(val2);
如果javascript有一个成熟的正则表达式引擎,可以使用一个积极的、不捕获的前瞻组来确定何时停止

由于javascript缺乏这一点,简单、清晰、高效的方法是根本不使用正则表达式。算法很简单:

  • 在源文本中找到[first/leftmost]
    /Documents
    ,然后

  • 查找源文本中最后/最右边出现的
    /

  • 处理以下两种特殊情况:

    • 源字符串根本不包含
      /Documents
      ,并且
    • 最右边的
      /
      /Documents
      中的
      /
  • 如果出现上述特殊情况,则返回所需的子字符串 从
    /文档
    扩展到并包括最后一个
    /

像这样:

函数getInterestingBitsFrom(路径){ const i=path.indexOf('/Documents'); 常数j=path.lastIndexOf('/'); const val=i<0?未定义//字符串中没有“/Documents” :i==j?path.slice(i)//字符串中的最后一个“/”是“/Documents”中的“/” :path.slice(i,j+1)/'/Documents/'或'/Documents/../' ; 返回返回; }
这也有一个值得称赞的好处,那就是对于那些必须了解您试图实现的目标的人来说,很容易理解。

文档是恒定的吗?您的尝试会返回什么?是的,文档是恒定的。对于temp1 10016,我的代码返回10016-10017;对于a_fpath,我的代码返回10016和10016-10017。谢谢,如果filename有“文档”?即使文件名是/has“Documents”,也可以这样做,因为它专门在“Documents”一词后面查找
“/”
,并且文件名不能有
“/”
…请查看我的答案中的Regex101链接