javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配

news2024/12/23 9:36:34

lastIndexOf匹配和正则表达式匹配

  • 项目需求
    • 1.规范的字符串
    • 2.不规范的字符串
    • 3-1.万能封装
    • 3-2.ChatGPT的优化写法
    • 4.正则表达式的用法
    • 5.补充知识:lastIndexOf的用法

项目需求

  • javascript中截取字符串中最后一个“/”和“?”之间的内容。

1.规范的字符串

https://test.com/p/course/column/p_64a7738ce4b0b0bc2bfcebaa?shareBind=true

function extractContent(url) {
  const lastSlashIndex = url.lastIndexOf('/');
  const lastQuestionMarkIndex = url.lastIndexOf('?');

  if (lastSlashIndex === -1 || lastQuestionMarkIndex === -1 || lastQuestionMarkIndex < lastSlashIndex) {
    return '';
  }
  const content = url.substring(lastSlashIndex + 1, lastQuestionMarkIndex);
  return content;
}

// 示例用法
const url = "https://test.com/p/course/column/p_64a7738ce4b0b0bc2bfcebaa?shareBind=true";
const extractedContent = extractContent(url);
console.log(extractedContent); // 输出: p_64a7738ce4b0b0bc2bfcebaa

在这里插入图片描述

在上述代码中,我们先使用lastIndexOf方法找到最后一个斜杠和问号的索引位置。然后,我们检查这两个索引位置是否有效,确保斜杠位于问号之前。如果索引位置无效,则返回空字符串。最后,我们使用substring方法截取位于斜杠之后、问号之前的内容,并返回结果。

请注意,上述代码仅考虑了截取最后一个斜杠和问号之间的内容。如果URL中没有斜杠或问号,或者它们的顺序不正确,提取的内容可能会有误。

2.不规范的字符串

如果提供的地址字符串不包含“?”时:

https://test.com/p/course/column/p_64a7738ce4b0b0bc2bfcebaa

function extractContent(url) {
  const lastSlashIndex = url.lastIndexOf('/');
  if (lastSlashIndex === -1) {
    return url;
  }
  const content = url.substring(lastSlashIndex + 1);
  return content;
}

// 示例用法
const url = "https://test.com/p/course/column/p_64a7738ce4b0b0bc2bfcebaa";
const extractedContent = extractContent(url);
console.log(extractedContent); // 输出: p_64a7738ce4b0b0bc2bfcebaa

在这里插入图片描述

3-1.万能封装

function extractContent(url) {
  var lastSlashIndex = url.lastIndexOf('/');
  var lastQuestionMarkIndex = url.lastIndexOf('?');
  var content='';

  //存在斜杠时
  if (lastSlashIndex != -1) {
    content = url.substring(lastSlashIndex + 1, lastQuestionMarkIndex);
  }
  
  //不存在问号时
   if (lastQuestionMarkIndex === -1) {
   content = url.substring(lastSlashIndex + 1);
  }
  
  return content;
}

// 示例用法
const url = "https://test.com/p/course/column/p_64a7738ce4b0b0bc2bfcebaa";
const extractedContent = extractContent(url);
console.log(extractedContent); // 输出: p_64a7738ce4b0b0bc2bfcebaa

在这里插入图片描述

3-2.ChatGPT的优化写法

可以使用 `lastIndexOf``substring` 方法来实现截取字符串中最后一个斜杠(/)和问号(?)之间的内容:

```javascript
function extractContent(url) {
  const lastSlashIndex = url.lastIndexOf('/');
  const lastQuestionMarkIndex = url.lastIndexOf('?');
  
  if (lastQuestionMarkIndex !== -1) {
    return url.substring(lastSlashIndex + 1, lastQuestionMarkIndex);
  }
  
  return url.substring(lastSlashIndex + 1);
}

// 示例用法
const url1 = "https://www.example.com/path/to/file?param=value";
const url2 = "https://www.example.com/path/to/file";
const extractedContent1 = extractContent(url1);
const extractedContent2 = extractContent(url2);
console.log(extractedContent1); // 输出: file
console.log(extractedContent2); // 输出: file

在上述代码中,我们首先使用 lastIndexOf 方法找到最后一个斜杠和问号的索引位置。然后,我们使用两个索引位置来判断是否存在问号。如果存在问号,则使用 substring 方法从最后一个斜杠的下一个位置开始截取到最后一个问号的位置之间的内容。如果不存在问号,则使用 substring 方法从最后一个斜杠的下一个位置开始截取到字符串的末尾的内容。

这种写法也能够正确地截取最后一个斜杠和问号之间的内容。在示例用法中,两个 URL 都会输出结果 “file”。

在这里插入图片描述

4.正则表达式的用法

function extractContent(url) {
  const regex = /\/([^/?]+)\??.*$/;
  const match = url.match(regex);
  
  if (match) {
    return match[1];
  }
  
  return '';
}

// 示例用法
const url1 = "https://www.example.com/path/to/file?param=value";
const url2 = "https://www.example.com/path/to/file";
const extractedContent1 = extractContent(url1);
const extractedContent2 = extractContent(url2);
console.log(extractedContent1); // 输出: file
console.log(extractedContent2); // 输出: file

在上述代码中,我们使用正则表达式来匹配最后一个斜杠和问号之间的内容。正则表达式 /\/([^/?]+)\??.*$/ 匹配的规则如下:

  • \/:匹配一个斜杠。
  • ([^/?]+):匹配除了斜杠和问号之外的连续字符,并将其捕获为分组。
  • \??:匹配一个可选的问号。
  • .*$:匹配剩余的任意字符。

然后,我们使用字符串的 match 方法并传入正则表达式来查找匹配项。如果有匹配项,则返回第一个捕获分组内容 (match[1]),即最后一个斜杠和问号之间的内容。如果没有匹配项,则返回空字符串。在示例用法中,两个 URL 都会输出结果 “file”。

5.补充知识:lastIndexOf的用法

lastIndexOf 是 JavaScript 字符串的一个方法,用于返回指定字符或子字符串在原始字符串中最后一次出现的位置索引。

语法:

string.lastIndexOf(searchValue[, fromIndex])

参数说明:

  • searchValue:要搜索的字符或子字符串。
  • fromIndex(可选):从哪个位置开始向前搜索。默认为字符串的末尾(即 string.length - 1)。

返回值:

  • 如果找到匹配的字符或子字符串,则返回最后一次出现的索引位置。
  • 如果未找到匹配的字符或子字符串,则返回 -1。

示例用法:

const str = 'Hello, World!';
const lastIndex = str.lastIndexOf('o');
console.log(lastIndex); // 输出: 8

const lastIndex2 = str.lastIndexOf('o', 7);
console.log(lastIndex2); // 输出: 4

const lastIndex3 = str.lastIndexOf('JavaScript');
console.log(lastIndex3); // 输出: -1

在上面的示例中,我们使用 lastIndexOf 方法搜索字符串中最后一次出现的字符 'o' 的索引位置。第一个 lastIndex 示例返回 8,因为最后一个 'o' 在索引位置 8 处。第二个 lastIndex2 示例中,我们通过将 fromIndex 参数设置为 7 来指定了搜索的起始位置,结果返回 4,因为最后一个 'o' 在索引位置 4 处。最后一个 lastIndex3 示例中,我们搜索了一个不存在的子字符串 'JavaScript',因此返回 -1。根据需求使用 lastIndexOf 方法来查找字符串中最后一次出现的字符或子字符串的位置。


@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战

文章目录 专栏导读1. 箱形图介绍1&#xff09;箱形图介绍2&#xff09;怎么看箱型图&#xff1f;3&#xff09;解释说明 2. 普通箱型图3. 水平箱型图4. 群组箱型图5. 带异常点的箱型图 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#…

Docker实战总结

Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are…

线性回归--波士顿房屋价格预测

一、波士顿房屋价格预测代码 import sysimport pandas as pd import numpy as np from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt import matplotlib as mpt from sklearn.model_selection import train_test_split##加载数据 datapd.re…

Druid工作原理

Druid工作原理-连接池初始化流程 标题 Druid工作原理-获取连接流程&#xff1a; 连接回收:

类定义练习

运行代码&#xff1a; //类定义练习 #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h" //定义类 class Person { private:string first_n…

直流有刷驱动板电流电压采集

直流有刷驱动板电流电压采集 电流采集会涉及到电流环的使用。 #include "./adc/bsp_adc.h" #include ".\motor_control\bsp_motor_control.h" #include "./led/bsp_led.h" #include "./usart/bsp_debug_usart.h"__IO uint16_t…

vue-element-admin深入系列-数据Mock

本文介绍 vue-element-admin 如何使用 MockJS 实现数据Mock,毕竟对于一个合格的前端来讲,自己能Mock数据是必须的: 自给自足,不用依赖服务端接口。毕竟环境问题是个大问题,更何况环境不稳定是常态,再加上偶尔服务端的数据格式变化,问题就更复杂。 数据复杂,页面复杂时。…

HackTheBox - 学院【CPTS】复习6 - Active Directory

ACTIVE DIRECTORY ENUMERATION & ATTACKS 这个模块其实与thm的AD教程相比&#xff0c;还是thm更适合刚开始接触AD以及学习从枚举到持久化的全阶段&#xff08;红队&#xff09;。而htb学院这个模块更注重于枚举和各种攻击手段&#xff0c;有点纯渗透的风格&#xff0c;弱化…

通过动态IP解决网络数据采集问题

动态地址的作用 说到Python网络爬虫&#xff0c;很多人都会遇到困难。最常见的就是爬取过程中IP地址被屏蔽。虽然大部分都是几个小时内自动解封的&#xff0c;但这对于分秒必争的python网络爬虫来说&#xff0c;是一个关键性的打击&#xff01;当一个爬虫被阻塞时&#xff0c;…

Java内部类笔记

1.为什么使用内部类? 使用内部类最吸引人的原因是&#xff1a;每个内部类都能独立地继承一个&#xff08;接口的&#xff09;实现&#xff0c;所以无论外围类是否已经继承了某个&#xff08;接口的&#xff09;实现&#xff0c; 对于内部类都没有影响 1.1.使用内部类最大的优点…

TCP/IP基础知识笔记

应用层&#xff1a;为用户提供应用功能&#xff0c;比如 HTTP、FTP、Telnet、DNS、SMTP等。 应用层是工作在操作系统中的用户态&#xff0c;传输层及以下则工作在内核态。 传输层&#xff1a;为应用层提供网络支持。 *TCP包含众多特性比如流量控制、超时重传、拥塞控制等因此可…

pytorch深度学习逻辑回归 logistic regression

# logistic regression 二分类 # 导入pytorch 和 torchvision import numpy as np import torch import torchvision from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import matplotlib.pyplot as …

(简单)剑指Offer II 056. 二叉搜索树中两个节点的和 Java

方法一&#xff1a;深度优先搜索哈希表 使用深度优先搜索的方式遍历整棵树&#xff0c;用哈希表记录遍历过的节点的值 对于一个值为x的节点&#xff0c;检查哈希表中是否存在k-x即可。如果存在对应的元素&#xff0c;那么我们就可以在该树上找到两个节点的和为k&#xff1b;否…

河流垃圾检测Y8S

【免费】河流垃圾检测Y8M&#xff0c;只需要OPENCV资源-CSDN文库 采用YOLOV8训练&#xff0c;得到PT模型&#xff0c;然后直接转ONNX&#xff0c;使用OPENCV的DNN&#xff0c;不需要其他依赖&#xff0c;支持C/PYTHON

Hadoop 之 分布式集群配置与使用(三)

Hadoop 之 分布式集群 一.集群实例创建二.配置1.创建三个虚拟机&#xff08;Anolis&#xff09;1.修改 HostName2.配置免密登录&#xff0c;配置前 2.配置命名节点1.在 nd1 / nd2 部署 hadoop2.配置 3.查看集群信息 三.测试 一.集群实例创建 以三个 Hadoop 实例创建集群&#…

对战五子棋——网页版

目录 一、项目简介 二、用户模块 1、创建用户实体类 2、编写userMapper接口文件 3、实现userMapper.xml文件 4、对用户密码进行加密 5、实现用户登录功能 6、实现用户注册功能 三、实现用户匹配模块 1、展示用户个人信息 2、匹配请求类 3、匹配响应类 4、创…

郭东白的架构课学习笔笔记(1)

1.架构师的品质 自信和勇气&#xff08;正确的废话&#xff09;拥有战略意图&#xff0c;所谓战略意图&#xff0c;就是拥有与其资源和能力极不相称的雄心壮志。使用演绎法寻找架构原理&#xff0c;而不是归纳法。 2.如何提升自己的架构能力 向身边比自己厉害的优秀架构师或…

【网络安全带你练爬虫-100练】第14练:文件内容的读取、取出

目录 一、目标1&#xff1a;把文件内容遍历取出 二、目标2&#xff1a;把文件内容全部取出 三、网络安全O 一、目标1&#xff1a;把文件内容遍历取出 &#xff08;1&#xff09;如果文件脚本在不同目录 file_path "path/to/your/file.txt" # 替换为你的文件路径…

【Gradle】Gradle之JVM进程详解

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

【机密计算组织】机密计算联盟

一、简介 1.1 机密计算联盟与成员 2019年8月22日&#xff0c;Linux基金会宣布多家巨头企业组建“机密计算联盟”&#xff08;Confidential Computing Consortium&#xff09;&#xff0c;该基金将负责对联盟活动进行监督。机密计算联盟专门针对云服务及硬件生态&#xff0c;致…