JS-在字符串形式的正则表达式中,需要对反斜杠进行转义

2024-05-01 08:36

本文主要是介绍JS-在字符串形式的正则表达式中,需要对反斜杠进行转义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、转换前
  • 二、转换后
  • 三、相关知识
  • 四 regExp(正则表达式)
        • 字面量和构造函数
  • 五,C#的@ 不用双斜杆
  • 总结


前言

在字符串形式的正则表达式中,需要对反斜杠进行转义!!!,最近用AI帮我转换代码,后端伙伴已经用C#的正则方法。结果被坑了一波。下面娓娓道来。


一、转换前

后端用C#写的判断方法,我就拿过来,想着最近用的AI大模型转换代码挺牛的。当然我用的是免费的国内的版本,而且测试了其他几个国内的免费版本,有些是能正确转译的。

C#代码:

 public bool CheckXXXNum(xxType xxx, string xxxNum){switch (xxx){case xxx:if (!Regex.IsMatch(xxxNum, @"^(\d{12}|\d{22})$")){return false;}break;default:}

二、转换后

用AI帮我转换后第二个“//d” 一开始帮我转换成d. 导致匹配不到。没细看的结果报错了,还好测试发现了。所以这里查了相关知识记录下。

// 辅助函数,使用第三方正则表达式库进行匹配
function match(value: string, pattern: string): boolean {const regex = new RegExp(pattern)return regex.test(value)
}export function checkXxNum(x: xxType | string,xxxNum: string
): boolean {switch (xxx) {case xxx:return match(xxxNum, '^(\\d{12}|\\d{22})$')}
}

三、相关知识

在JavaScript中,使用构造函数 new RegExp(pattern) 的方式创建正则表达式时,pattern 参数应该是一个字符串,这个字符串内容就是正则表达式的模式。在字符串中表示正则表达式的模式时,确实需要使用双反斜杠 \\ 来转义特殊字符,包括反斜杠自身。

例如,如果你想创建一个匹配\d(任何数字)的正则表达式,由于\d在正则表达式中是一个特殊序列,表示匹配数字,但在字符串中编写\d时,需要对\进行转义,于是你得写成\\d。因此,构造函数的使用方式如下:

let regex = new RegExp("\\d");

或者,如果你想要创建一个全局匹配数字的正则表达式,需要添加修饰符g,则模式字符串应该是:

let regex = new RegExp("\\d", "g");

模板字符串
使用模板字符串创建一个匹配数字的正则表达式,依然写为:

let pattern = `\\d`; // 匹配任何单个数字
let regex = new RegExp(pattern);

四 regExp(正则表达式)

参考 MDN正则表达式

字面量和构造函数

有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。

字面量
由斜杠 (/) 包围而不是引号包围。

构造函数的字符串参数
由引号而不是斜杠包围。

以下三种表达式都会创建相同的正则表达式:

/ab+c/i; //字面量形式
new RegExp("ab+c", "i"); // 首个参数为字符串模式的构造函数
new RegExp(/ab+c/, "i"); // 首个参数为常规字面量的构造函数

五,C#的@ 不用双斜杆

在C#中,字符串前加上 @ 符号用来创建一个所谓的“verbatim(逐字)字符串字面量”。这种字符串允许你几乎完全按照字面意义来编写字符串内容,也就是说,除了字符串结束的引号(")之外,所有字符都不需要转义。

当在正则表达式中使用 @ 定义字符串时,由于字符串变为逐字字符串字面量,大多数情况下你不需要对特殊字符如反斜杠(\)进行转义。因此,正则表达式中的 \d 直接写作 \d 而不是 \\d\w 就是 \w,依此类推。

例如,下面的C#代码展示了如何使用 @ 来定义一个正则表达式字符串,而无需对其中的反斜杠进行转义:

string pattern = @"^\d+$"; // 匹配一个或多个数字组成的字符串
bool isMatch = Regex.IsMatch(inputString, pattern);

在这个例子中,@ 前缀使得我们直接使用 \d+ 而不需要双反斜杠,因为字符串中的每一个字符都会被当作普通字符对待,除非它是引号(表示字符串结束)或另一个特殊字符 $(在本例中用于正则表达式的结尾匹配)。这样简化了正则表达式的编写,减少了因转义问题引起的错误。

总结

简而言之,在字符串中,单个反斜杠是转义字符,所以需要再加一个来表示字面意义上的反斜杠。这样,正则表达式引擎才能正确解析你的模式字符串。而C# 用的@ 不用转义

这篇关于JS-在字符串形式的正则表达式中,需要对反斜杠进行转义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951212

相关文章

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结