簡單入門Javascript正則表達式

我們已經會熟練使用js字符串類型了,例如你想知道一個變量是否等于一個字符串,可能可能這樣判斷

if(a=='hello,world'){...
}
復制代碼

但是往往我們有時候對一些字符串判斷顯得力不從心,例如判斷一個文件的類型是否為js類型,可能有下面幾種文件名格式

1, hello.js
2, js.hello
3, hellojs
4, helljso
復制代碼

以我們人腦的認知來看,我們一眼能夠看出只有第一個符合我們的要求,但是我們怎么寫這個判斷程序呢?例如我們可以這樣判斷,例如js字符串方法,從右邊往左邊取三位,如果為‘.js’則匹配成功。 但是我問一下如果文件名描述為hello..js呢?顯然,這種方法不太適合,所以需要正則表達式來進行精確匹配了。 正則表達式用于描述一種特征,就例如你描述某某女生長得怎么樣一樣。例如瓜子臉,一米六到一米七,長頭發... 同理我們可以使用正則表達式來描述我們需要的字符,例如郵箱格式:

一串數字或者字母+@+字符串或者數字+'.'+'數字或者字符串'
復制代碼

我們怎么用代碼來描述我們的這個對象呢,我們可以使用例如下面的寫法

var a=/hello/i
或者
var a = new RegExp('hello',i);
復制代碼

/ / 之間寫入你的匹配規則 后面加一個修飾符i 或者g或者m

i表示忽略大小寫,即人為HELLO和hello是一樣的
g表示全局,多用在匹配和搜索中,我們先暫且不管。
m表示多行匹配
復制代碼

我們首先學會怎么描述規則,即怎么寫/ /之間的規則 對于某種特征一般有一下幾種關系。

  1. 精確的。例如字符為'hello'的,只需/hello/即可,如果你接收HELLO,即/hello/i即可
  2. 含有,例如0-9之間
  3. 范圍加限定長度,例如我需要匹配長度為4的0-9之間數字
  4. 邊界的,例如 結尾為.js 或者開頭為020-的電話格式

對于我們是否寫對了規則,我們可以用test()方法試一試 test()好比一面照妖鏡

var a=/hello/i
console.log(a.test('heelo') //false
復制代碼

說明heelo和a不匹配,是個假的。 下面分別說明上述幾種

  1. 包含[],這種關系類似于數學之中排列組合,例如[abc],代表a,b,c所能組成的各種組合
let a=/[0-9]/;
console.log(a.test(9))  //true
console.log(a.test(90)) //true
console.log(a.test('90')) //true
console.log(a.test('90SS')) //true
console.log(a.test('ABCD')) //falselet b=/[0]/;
console.log(b.test(9))  //fasle
console.log(b.test(90)) //true
復制代碼
let a=/[abc]/;
console.log(a.test('a'))  //true
console.log(a.test('ac')) //true
console.log(a.test('abc')) //true
console.log(a.test('ABCD')) //false
復制代碼
let a=/[*&$]/;
console.log(a.test('*'))  //true
console.log(a.test('*$')) //true
復制代碼

下面有幾個常用的[]寫法

1.[a-z] 包含字母let a=/[a-z]/;console.log(a.test('a'))  //trueconsole.log(a.test('Z')) //false 因為區分大小寫console.log(a.test('abc')) //trueconsole.log(a.test('aS'))   //true
2.[A-Za-z0-9]包含大寫或小寫字母或數字
復制代碼

單單使用[]是有局限的,因為它能匹配的實在是太寬泛了,只要包含即可。例如[a-z],對于字符'a2'也是符合的。要使得我們匹配更加精確,正則表達式還有許多武器,例如元字符。 元字符個人理解是一種限制規則來縮小匹配范圍 一般來說有

限定屬性以及長度。

   \d 表示匹配一位整數 相反\D匹配一個非數字;\w 表示匹配一位英文單詞 相反\W匹配一個非英文單詞;\s 表示匹配一位空格 相反\S匹配一個非空格;...更多可以參考 http://www.runoob.com/jsref/jsref-obj-regexp.html
復制代碼

使用這個有什么用呢?你已經知道了屬性和長度,你可以去檢測某些連在一起的特征,例如你現在有一篇英文的文章,我需要找到特征: 3位數字+3位字母的部分標紅:

let txt='s23df12S456abx';  ==> /\d\d\d\w\w\w/let a=/\d\d/;
console.log(a.test('1'))    //false 
console.log(a.test('12'))    //true
console.log(a.test('1ac2'))  //false 必須兩個相連
let b=/\s/;
console.log(b.test('my file.js')) //true 檢測是否含有空格
復制代碼

限定位置

我們已經會使用屬性加長度了,但是有時候往往我們也需要位置的限定 。下面列舉幾個常用的元字符

$ 表示結尾 例如/js$/表示js不能再有任何字符串了,空格也不行
let a=/hello$/;
console.log(a.test('hello'))    //true 
console.log(a.test('hello world')) //false
console.log(a.test('hello  ')) //false
^ 表示開頭 意思和 $ 相反 即使空格也不行,一般^和$成對使用,可以構造出一些常用的正則表達式。
例如
由字母和數字組成,長度不限的話可以表示為
/^[A-Za-z0-9]$/
let a=/^[A-Za-z0-9]$/;
console.log(a.test('我a'))    //false
console.log(a.test('$123a')) //false
console.log(a.test('hello 23')) //fasle
console.log(a.test('hello23 ')) //false
復制代碼

如果想要使得空格也可以匹配 可以使用\b \b表示邊界,可以為開頭或者結尾 例如 ' hello,world '

 let a=/\bhi\b/;console.log(a.test('hi'))    //trueconsole.log(a.test('him')) //false 后面有mconsole.log(a.test('hi m')) //true hi是單獨的console.log(a.test('shi')) //false 前面有s
復制代碼

量詞使用

例如我們想匹配連續三個數字,我們可以:

/\d\d\d/
復制代碼

假如要匹配100個呢 寫100個嗎?我們不可能手動寫100個吧 我們有下面幾個常用的表述:

  1. +表示重復 n+匹配任何包含至少一個 n 的字符串。 /abc+/ 可以匹配 abc abcc abccccc abccccd
  2. *表示匹配任何包含至少0個或者一個 n 的字符串
/abc*/ 可以匹配 ab abc abccc abccd 可以不包括c
復制代碼
  1. {}使用 上述+和*號范圍都可以多到無限多。但是要表示具體多少個呢 我們可以使用{},這類似于數學里的表示范圍[a,b]
let a=/^c{1,3}$/;
console.log(a.test('c'))   //true
console.log(a.test('cc')) //true
console.log(a.test('ccc')) //true
console.log(a.test('cccc')) //false
其中{1,3}表示出現1-3個 
{1,}表示匹配一個或者一個以上
{1}表示只匹配一個。
復制代碼

當然還有許多正則表達式規則了,實在寫不完了,讀者可以自行百度。(完)

轉載于:https://juejin.im/post/5be983cc6fb9a049d2359488

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389235.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389235.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389235.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實現klib_使用klib加速數據清理和預處理

實現klibTL;DRThe klib package provides a number of very easily applicable functions with sensible default values that can be used on virtually any DataFrame to assess data quality, gain insight, perform cleaning operations and visualizations which results …

MMDetection修改代碼無效

最近在打比賽,使用MMDetection框架,但是無論是Yolo修改類別還是更改head,代碼運行后發現運行的是修改之前的代碼。。。也就是說修改代碼無效。。。 問題解決辦法: MMDetection在首次運行后會把一部分運行核心放在anaconda的環境…

docker etcd

etcd是CoreOS團隊于2013年6月發起的開源項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫,用于配置共享和服務發現 etcd內部采用raft協議作為一致性算法,etcd基于Go語言實現。 etcd作為服務發現系統,有以下的特點&…

SpringBoot簡要

2019獨角獸企業重金招聘Python工程師標準>>> 簡化Spring應用開發的一個框架;      整個Spring技術棧的一個大整合;      J2EE開發的一站式解決方案;      自動配置:針對很多Spring應用程序常見的應用功能&…

發送郵件 的類 C# .net

/// <summary> /// 發送郵件 /// </summary> /// <param name"SendTo">發送人的地址</param> /// <param name"MyEmail">我的Email地址</param> /// <param name"SendTit…

簡明易懂的c#入門指南_統計假設檢驗的簡明指南

簡明易懂的c#入門指南介紹 (Introduction) One of the main applications of frequentist statistics is the comparison of sample means and variances between one or more groups, known as statistical hypothesis testing. A statistic is a summarized/compressed proba…

計算機科學期刊_成為數據科學家的五種科學期刊

計算機科學期刊The field of data science is advancing at an incredible pace. New scientific articles are published daily. As a student, I try to stay up-to-date with the scientific literature that is published. In this blog post, I created a list of scienti…

Torch.distributed.elastic 關于 pytorch 不穩定

錯誤日志&#xff1a; Epoch: [229] Total time: 0:17:21 Test: [ 0/49] eta: 0:05:00 loss: 1.7994 (1.7994) acc1: 78.0822 (78.0822) acc5: 95.2055 (95.2055) time: 6.1368 data: 5.9411 max mem: 10624 WARNING:torch.distributed.elastic.agent.server.api:Rec…

0x22 迭代加深

poj2248 真是個新套路。還有套路剪枝...大到小和判重 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<bitset> using namespace std;int n,D,x[110];bool…

云原生全球最大峰會之一KubeCon首登中國 Kubernetes將如何再演進?

雷鋒網消息&#xff0c;11月14日&#xff0c;由CNCF發起的云原生領域全球最大的峰會之一KubeConCloudNativeCon首次登陸中國&#xff0c;中國已經成為云原生領域一股強大力量&#xff0c;并且還在不斷成長。 毫無疑問&#xff0c;Kubernetes已經成為容器編排事實標準&#xff…

分布分析和分組分析_如何通過群組分析對用戶進行分組并獲得可行的見解

分布分析和分組分析數據分析 (DATA ANALYSIS) Being a regular at a restaurant is great.乙 eing定期在餐廳是偉大的。 When I started university, my dad told me I should find a restaurant I really liked and eat there every month with some friends. Becoming a reg…

python 工具箱_Python交易工具箱:通過指標子圖增強圖表

python 工具箱交易工具箱 (trading-toolbox) After a several months-long hiatus, I can finally resume posting to the Trading Toolbox Series. We started this series by learning how to plot indicators (specifically: moving averages) on the top of a price chart.…

PDA端的數據庫一般采用的是sqlce數據庫

PDA端的數據庫一般采用的是sqlce數據庫,這樣與PC端的sql2000中的數據同步就變成了一個問題,如在PDA端處理,PDA端的內存,CPU等都是一個制約因素,其次他們的一個連接穩定及其間的數據傳輸也是一個難點.本例中通過在PC端的轉化后再復制到PDA上面,這樣,上面所有的問題都得到了一個有…

bzoj 1016 [JSOI2008]最小生成樹計數——matrix tree(相同權值的邊為階段縮點)(碼力)...

題目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id1016 就是縮點&#xff0c;每次相同權值的邊構成的聯通塊求一下matrix tree。注意gauss里的編號應該是從1到...的連續的。 學習了一個TJ。用了vector。自己曾寫過一個只能過樣例的。都放上來吧。 路徑壓縮的…

區塊鏈的模型結構

關于區塊鏈的模型結構問題&#xff0c;行業內已經談論千萬遍了&#xff0c;基本上已經成為一種定義式的問題了。總體上來看&#xff0c;區塊鏈的基礎架構可以分為六層&#xff0c;包括數據層、網絡層、共識層、激勵層、合約層、應用層。每一層分別完成一項核心的功能&#xff0…

數據科學家 數據工程師_數據科學家應該對數據進行版本控制的4個理由

數據科學家 數據工程師While working in a software project it is very common and, in fact, a standard to start right away versioning code, and the benefits are already pretty obvious for the software community: it tracks every modification of the code in a p…

JDK 下載相關資料

所有版本JDK下載地址&#xff1a; http://www.oracle.com/technetwork/java/archive-139210.html 下載賬戶密碼&#xff1a; 2696671285qq.com Oracle123 轉載于:https://www.cnblogs.com/bg7c/p/9277729.html

商米

2019獨角獸企業重金招聘Python工程師標準>>> 今天看了一下商米的官網&#xff0c;發現他家的東西還真的是不錯。有錢了&#xff0c;想去體驗一下。 如果我妹妹還有開便利店的話&#xff0c;我會推薦他用這個。小巧便捷&#xff0c;非常方便。 轉載于:https://my.osc…

C#生成安裝文件后自動附加數據庫的思路跟算法

using System; using System.Collections.Generic; using System.Windows.Forms; using System.Data.SqlClient; using System.Data; using System.ServiceProcess; namespace AdminZJC.DataBaseControl { /// <summary> /// 數據庫操作控制類 /// </summary> …

python交互式和文件式_使用Python創建和自動化交互式儀表盤

python交互式和文件式In this tutorial, I will be creating an automated, interactive dashboard of Texas COVID-19 case count by county using python with the help of selenium, pandas, dash, and plotly. I am assuming the reader has some familiarity with python,…