【问题标题】:How to find text between 2 characters with multiple occurrences?如何在多次出现的 2 个字符之间查找文本?
【发布时间】:2022-11-14 02:07:53
【问题描述】:

给定以下字符串,获取文件 ID 的最有效方法是什么?想要的部分:XXXXXXXXXXXxxxxxxxxXXX,介于//view 之间

下面的尝试有效,但真的需要将字符串反转两次吗?

谢谢。

let = url = 'https://drive.google.com/file/d/1pnEX1OXXXXXXu6z9dPV5ZZ5VHqPU--6/view?usp=share_link'

url = reverseString(url)

let id = url.split('weiv/').pop().split('/')[0]
id = reverseString(id)

console.log('URL:' + id)

function reverseString(str) {
  var splitString = str.split("");
  var reverseArray = splitString.reverse();
  var joinArray = reverseArray.join("");
  return joinArray;
}

【问题讨论】:

  • 与您的问题本身无关:您问“什么是最有效的方法”...好吧,如果您没有连续数百万次执行此操作并且字符串没有数千个字符的巨大大小,那么在现代计算机中这真的没关系,它会非常快.在我看来,你应该问什么是最简单的维护方式,或者其他人理解它的最易读的方式等等。
  • 是/和/view之间的一切吗?即 1pnEX1OXXXXXXu6z9dPV5ZZ5VHqPU--6 在你的例子中?
  • 谢谢,@GerardoFurtado!好点子!它只会被处理一次。

标签: javascript


【解决方案1】:

我会用一个简单的正则表达式来解决这个问题。

const url = 'https://drive.google.com/file/d/1pnEX1OXXXXXXu6z9dPV5ZZ5VHqPU--6/view?usp=share_link';
const m = url.match(/^.*?/./(.*?)/view.*$/);
console.log(m[1])

【讨论】:

  • 您可以避免计算正斜杠。 /(?<=/)[^/]+(?=/view)/
  • 感谢您的回答!正则表达式似乎是另一个小宇宙。很多东西要学。
【解决方案2】:

此解决方案搜索“/d/”部分并前进三个字符以开始 string.slice,一直持续到下一次出现 /。如果 /d/ 总是在 id 部分之前,这应该是可靠的。

const url = 'https://drive.google.com/file/d/1pnEX1OXXXXXXu6z9dPV5ZZ5VHqPU--6/view?usp=share_link';

const id = url.slice(url.indexOf("/d/")+3, url.indexOf("/",url.indexOf("/d/")+3 ));

console.log(id);

【讨论】:

    【解决方案3】:

    您可以使用substring 获取/d//view 之间的值

    let = url = 'https://drive.google.com/file/d/1pnEX1OXXXXXXu6z9dPV5ZZ5VHqPU--6/view?usp=share_link'
    
    const fileId = url.substring(url.lastIndexOf("/d/") + 3, url.lastIndexOf("/view"));
    
    console.log(fileId)

    【讨论】:

    • 我们有非常相似的解决方案,我想我同时在打字。
    • 他们都依赖/d/,但尚未确认其稳定。
    • @pilchard,我检查了几个样本文件,/d/ 总是在那里!我想我会用这个。多谢你们!
    猜你喜欢
    • 2021-04-29
    • 2021-07-07
    • 1970-01-01
    • 2014-08-15
    • 2014-11-28
    • 2016-08-05
    • 1970-01-01
    • 2014-11-28
    • 2016-03-07
    相关资源
    最近更新 更多