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# 用的@ 不用转义

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客NC353 回文子串的数量【中等 字符串,枚举,回文 C++/Java/Go/PHP 高频】

题目 题目链接: https://www.nowcoder.com/practice/3e8b48c812864b0eabba0b8b25867738 思路 参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** param str string字符串…

详解centos8 搭建使用Tor 创建匿名服务和匿名网站(.onion)

1 Tor运行原理: 请求方需要使用:洋葱浏览器(Tor Browser)或者Google浏览器来对暗,网网站进行访问 响应放需要使用:Tor协议的的Hidden_service 2 好戏来了 搭建步骤: 1.更新yum源 rpm -Uvh h…

OceanBase V4.3 发布—— 迈向实时分析 AP 的重要里程

OceanBase在2023年初,发布了4.x架构的第一个重要版本,V4.1。该版本采用了单机分布式一体化架构,并在该架构的基础上,将代表数据库可靠性的RTO降低至 8 秒以内,从而确保在意外故障发生后,系统能够在极短时间…

javafx如何一键打包成exe

javafx如何打包成exe JavaFX-Template-Native 集成jfoenix、commons-math、commons-lang3、netty,方便一些和底层做通信使用,不需要可以自行pom中去掉依赖当前使用的jdk17,理论上jdk14都支持采用模块化,支持一键打包生成很小的ex…

Threejs制作服务器机房冷却结构

这节再绘制一个机房的结构,因为内容比较简单,就只使用一个章节来介绍, 先来一张效果图, 需要两个模型:一个冷却设备,一个服务器机箱,我这里是从网上找来的,首先我们搭建一个场景&a…

solidworks出现slderrresu.dll错误如何解决?亲测有效

通过近来给客户安装SolidWorks发现,SolidWorks2010、SolidWorks2012、SolidWorks2014、SolidWorks2015、SolidWorks2016、SolidWorks2017都会出现这个slderrresu.dll安装错误问题: 其实这个错误很好解决,主要是因為安裝中文版solidworks沒有選擇安裝中文…

.NET操作 Access (MSAccess)

注意:新项目推荐 Sqlite ,Access需要注意的东西太多了,比如OFFICE版本,是X86还是X64 连接字符串 ProviderMicrosoft.ACE.OleDB.15.0;Data Source"GetCurrentProjectPath"\\test.accdb//不同的office版本 连接字符串有…

Linux 虚拟主机切换php版本及参数

我使用的Hostease的Linux虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机,但是没有找到切换PHP以及查看PHP有哪些版本的位置,因此咨询了Hostease的技术支持,寻求帮助了解到可以实现在cPanel面板上找到此切换PHP版本的按钮&…

亚马逊商品详情API接口:解锁亚马逊商品信息的全面视野

亚马逊商品详情API接口:解锁亚马逊商品信息的全面视野 在跨境电商和电商数据分析领域,亚马逊作为全球领先的电商平台,其商品信息对商家、开发者以及市场分析师来说至关重要。为了更高效地获取亚马逊平台上的商品详情,亚马逊商品详…

哨兵-1A与DInSAR技术监测尼泊尔地震前后地表形变

辽宁抚顺是一座以煤而兴的重工业城市,建国初期抚顺被誉为“煤都”,这里有闻名全国享誉世界的亚洲最大的露天煤矿——抚顺西露天矿。抚顺西露天矿地处抚顺煤田西部,矿坑东西长6.6公里,南北宽2.2公里,最终开采垂直深度47…

释放人工智能潜力,Polkadot 再掀区块链技术革命

来源:https://polkadot.network/blog/unleashing-the-potential-of-ai-with-polkadot/ 编译:OneBlock 区块链技术开辟了一个充满可能性的世界,这一点在新兴崛起的人工智能(AI)领域最为明显。 Polkadot 生态处于这场…

Go Web开发【xorm 框架】

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

【JavaWeb Day 2 - JS 】

JavaWeb Day 2 - JS JS背景故事1. JS 引入方式2. JS 基本语法2.2 变量2.3 数据类型2.4 运算符 3. JS 函数4. JS 对象4.1 Array对象4.2 String对象4.3 JSON对象4.4 BOM对象4.4.1 windows 对象4.4.2 location 对象 4.5 DOM 对象DOM 案例 5. JS 事件监听5.1 JS 事件绑定 及 常见事…

JavaScript底层原理(栈、堆、主线程、任务队列、事件循环机制)

1. 栈(heap)和堆(stack) 栈是栈内存的简称,堆是堆内存的简称。顾名思义,内存是干啥的?内存就是用来存放数据的。 栈 栈只有一个入口,同时也是出口,数据遵循先进后出、后进先出的原则。 栈用于存放基本类型数据和引用…

vue 模板字符串

1.模板字符串换行问题 white-space: pre-wrap; 2. 鼠标移入 显示提示框 点击手动隐藏 myChart.on("mouseover", function (params) {myChart.dispatchAction({type: "downplay",}); }); tooltip: {show: true, //是否显示提示框组件,包括…

安卓获取SHA

1:安卓通过签名key获取SHA 方式有两种, 1、电脑上来存在eclipse的用户或正在使用此开发工具的用户就简单了,直接利用eclipse 走打包流程,再打包的时候选择相应的签名,那么在当前面板的下面便会出现签名的相关信息。 2、…

牛客热题:合并K个升序链表

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:合并K个升序链表题目链接&#…

【刷题篇】动态规划-完全背包问题(十一)

文章目录 1、完全背包2、零钱兑换3、零钱兑换 II4、完全平方数 1、完全背包 #include <iostream> #include<vector> using namespace std;int main() {int n,v;cin>>n>>v;vector<int> V(n1);vector<int> W(n1);for(int i1;i<n;i){cin&g…

【消息队列】延迟消息

延时消息 延迟消息死信交换机延迟消息的插件 延迟消息 生产者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而在指定时间之后才收到消息 比如说演唱会的票&#xff0c;抢上了但是迟迟未支付&#xff0c;但是库存已经占用&#xff0c;就需要用到延迟消…

【STM32】F405/407的模块总览图,记录查看

从STM32F405/407数据手册中提取&#xff0c;方便以后查看。主要是什么外设连接在什么总线上&#xff0c;时钟频率是多少。 TIM2、3、4、5、12、13、14在APB1上&#xff0c;最大频率84M TIM1、8、9、10、11在APB2上&#xff0c;最大频率168M
最新文章