js 正則

2024-04-20 17:08
文章标签 js 正則

本文主要是介绍js 正則,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*: 任意次數,等同於 {0,}
+: 至少一次,等同於 {1,}
?: 零或一次(有或沒有),等同於 {0,1}
() :用于将基本的单元合成一个大的单元

反斜線 \

/* 在「非」特殊字元前面使用反斜線時,表示要把反斜線後的字當作是特殊字元 */


regex = /\b/      // b 原本不是特殊字元,這個 b 要當成特殊字元/* 在特殊字元前面使用反斜線時,表示要把反斜線後的字當作是「非」特殊字元 */
regex = /if\(true/    // ( 原本是特殊字元,但這裡要當成非特殊字元
regex = /1\+2=3/    // + 原本是特殊字元,但這裡要當成非特殊字元

(?=xxx):是零宽断言抄,表示后面的字符串必须符合xxx这个正则表达式

\d

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

var reg=/(\d{3})+/ //必须是1个或多个的3个连续数字
console.log(reg.test('123')) // true ,匹配123
console.log(reg.test('1234567')) // true ,匹配123456
console.log(reg.test('12')) // flase

(?!pattern)

正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
简单说,以 xxx(?!pattern)为例,就是捕获不以pattern结尾的内容xxx

例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

var reg=(?!\d) // 数字不允许后面跟着数字

匹配0或多个正好在它之前的那个字符。例如正则表达式。*意味着能够匹配任意数量的任何字符。 ? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。.*是指任何字符0个或多个,.?是指任何字符0个或1个.

.具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。.?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。

?表示非贪婪模式,即为匹配最近字符 如果不加?就是贪婪模式a.*bc 可以匹配 abcbcbc

去掉換行

 let str = info.replace(/\n/g, '')

去掉空格

str.replace(/\s+/g, '')

去掉第一個空格

str.replace(/^\s*/g,"");

去掉最後一個空格

str.replace(/\s*$/g,"");

去掉兩側空格

str.replace(/(^\s*)|(\s*$)/g, "");

去掉換行

str.replace(/\n/g, '')

去掉終端特殊符號

有時候我們會獲取終端的字符串,而這些字符串有時候會加上樣式,
所以輸出的字符串可能像是 :
\u001b[31m 我是文字 \u001b[0m’

那麼我們如果只要中間的中文/英文的話就要採取正則

str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '')

過濾並獲取網址中的參數

首先這是在我業務邏輯上很常使用的方法,有的時候專案的頁面會由別的地方導向進來,而這個頁面有些的參數是由上一頁的頁面傳遞過來的,此時這些參數,我們會把它埋在網址裡面,而專案的頁面只需要從網址裡面提取這些參數即可,而這個時候我們大多數採用正則。
在開始之前,說明下我們埋參數的規則(這些邏輯規則有個公司規範會有稍微不同不過大同小異)
假設我們要在頁面傳遞id,則會
像這樣由?開始,甚至以#作為結束
?articleId=105671279

而一個以上的參數則會使用 & 作為連結
?articleId=105671279&client_id=523897891731

了解了這些規則以後,就可以使用正則,將這些參數提出

  let regex = /[?&]([^=#]+)=([^&#]*)/g

接下來一步步來分析這行正則的意思

定義匹配的字符範圍: [ ]

例如 :
[a-zA-Z0-9] : 匹配a到z 和 A到Z 和 0到9
[\s*] : 匹配 空格或者*號

捕获性分组: ( )

(foo) (bar) \1 \2 : 匹配 foo bar foo bar

最少一次或多次: +

匹配前面的子表达式最少一次或多次

zo+ : 匹配 zoo ,但是無法匹配 z

零次或多次: *

匹配前面的子表达式零次或多次。例如
zo* : 匹配 z 以及 zooooo 相當於 {0,}

接下來把上面的知識套用進來,可以這麼解釋 :

[?&] : 匹配至少一个?&的字符

([^=#]+) : 至少要有一個非 = 或者 # 的字符 ,且將這些分為一個分組

([^&#]*) : 匹配非 &或者 # 的字符並且後面可以沒有或者有多個字串,且將這些分為一個分組

const str = 'https://editor.csdn.net/md/?articleId=105671279'
const regex = /[?&]([^=#]+)=([^&#]*)/g
// 匹配結果為 ?articleId=105671279

匹配完成後會得到 ?articleId=105671279 這樣的一串字符,但是更多時候我們需要的是把這樣的參數轉為key與屬性(對象類型),這個時候我們就可以使用 exce

exec()

exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
聽起來很文言文,簡單的意思就是,我們在上面的正則中使用了 () 捕獲性分組,這個時候exce()方法返回的數組就會依照 () 來切割返回,繼續拿我們上面匹配的例子:

const str = 'https://editor.csdn.net/md/?articleId=105671279'
const regex = /[?&]([^=#]+)=([^&#]*)/g
regex .exec(str);
/*返回 :
0: "?articleId=105671279"
1: "articleId"
2: "105671279"
*/

返回數組的第一個參數永遠是匹配成功的字符串 ?articleId=105671279 ,而第二個參數則會是根據 正則當中使用 () 來分組匹配到的參數 這裡返回的是
articleId,而第三個參數則是對照第二個分組匹配到的參數以此類推,有了這樣的結果,我們就可以把它們整理成我們需要的格式

 let params = {}let matchwhile ((match = regex.exec(url))) {params[match[1]] = match[2]}console.log(params)
/*輸出: {articleId: "105671279"}
*/

这篇关于js 正則的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块const { randomUUID } = require('crypto');const uuid = randomUUID();console.log(uuid); // 输出类似 '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

uuid.js 使用

相关代码 import { NIL } from "uuid";/** 验证UUID* 为空 则返回 false* @param uuid* @returns {boolean}*/export function MyUUIDValidate(uuid: any): boolean {if (typeof uuid === "string" && uuid !== NIL) { //uuid

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(