1. 程式人生 > >(十四)JavaScript RegExp正則表示式

(十四)JavaScript RegExp正則表示式

轉義符號 \(反斜槓)

\n(字串換行)
\\(字串\)
\?(字串?)

建立正則表示式

1、語法/pattern/attributes

引數 pattern 是一個字串,指定了正則表示式的模式。
引數 attributes 是一個可選的字串,包含屬性 “i”、“g” 和 “m”,
i 忽視大小寫。
g 全域性匹配(查詢所有匹配而非在找到第一個匹配後停止)。
m 執行多行匹配。

var reg = /abc/ig;

2、語法new RegExp(pattern, attributes);

var reg = new RegExp("abc","i");

RegExp規則

方括號 []

方括號 [ ]

查詢方括號之間的任何字元
尖角號^ 放在方括號裡面[^] 查詢任何不在方括號之間的字元

小括號 ()

小括號()用來指定子表示式(也叫做分組)
後向引用用於重複搜尋前面某個分組匹配的文字,\1代表分組1匹配的文字,\2代表分組2匹配的文字,以此類推

var reg = /(\w)\1\1(\w)\2/g;
var str = 'aaacc bbbff aabrr';
console.log(    str.match(reg)    );  //["aaacc", "bbbff"]

元字元

. === [^\r\n]單個字元,除了行結束符\r和換行符\n
\w === [0-9A-z_]
\W === [^\w]


\d === [0-9]
\D === [^\d]
\s === [\t\r\n\v\f ]\s 包括製表符\t、回車符\r、換行符\n、垂直製表符\v、換頁符\f、空格)
\S === [^\s]
\b === 單詞邊界
\B === 非單詞邊界

量詞

假設n為一個字串

n* 匹配0或多個n 字串
n+ 匹配1或多個n 字串
n? 匹配0或1個n 字串
n{x} 匹配x個n 字串 如:n{3} 三個n
n{x,y} 匹配x至y個n 字串 如:n{1,3} 1至3個n
n{x,} 匹配x至無窮多個n 字串

其他

^n 匹配開頭為 n
n$ 匹配結尾為 n

正向預查/正向斷言
(?=n) 匹配任何其後緊接指定字串 n 的字串

var reg = /.+?([email protected])/g;
var str = "[email protected]"; 
console.log(    str.match(reg)    );  //["test"]

非 正向斷言
(?!n) 匹配任何其後沒有緊接指定字串 n 的字串
反向斷言(javascript不支援)
(?<=n) 匹配任何前面緊接指定字串 n 的字串
非 反向斷言(javascript不支援)
(?<!n) 匹配任何前面沒有緊接指定字串 n 的字串

貪婪與非貪婪匹配
預設是貪婪匹配,非貪婪匹配 在量詞後面新增 ?
*? 重複0次或多次(任意次),但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{x,y}? 重複x到y次,但儘可能少重複
{x,}? 重複x次以上,但儘可能少重複

var reg = /a.*b/g;
var str = "abaaab"; 
console.log(    str.match(reg)    );  //["abaaab"]
var reg = /a.*?b/g;
var str = "abaaab"; 
console.log(    str.match(reg)    );  //["ab", "aaab"]

RegExp 物件的方法

RegExpObject.test(string)

test() 方法用於檢測一個字串是否匹配某個模式.
如果字串 string 中含有與 RegExpObject 匹配的文字,則返回 true,否則返回 false。

var reg = /a/;
var str = 'bbbbabb';
var str2 = 'cccc';
console.log(    reg.test(str)    );  //true
console.log(    reg.test(str2)    ); //false

RegExpObject.exec(string)

exec() 方法用於檢索字串中的正則表示式的匹配。

RegExpObject.lastIndex 遊標
var reg = /a/g;
var str = 'aba';
console.log(    reg.exec(str)    );  //["a", index: 0, input: "aba"]
console.log(    reg.lastIndex    );  //1
console.log(    reg.exec(str)    );  //["a", index: 2, input: "aba"]
console.log(    reg.lastIndex    );  //3
console.log(    reg.exec(str)    );  //null
console.log(    reg.lastIndex    );  //0
console.log(    reg.exec(str)    );  //["a", index: 0, input: "aba"]
console.log(    reg.lastIndex    );  //1

當正則表示式不是全域性匹配模式 g 時,遊標不會動。

var reg = /(\w)\1\1(\w)\2/g;
var str = 'aaacc bbbff aabrr';
console.log( str.match(reg) );  //["aaacc", "bbbff"]

console.log( reg.exec(str) ); //["aaacc", "a", "c", index: 0, input: "aaacc bbbff aabrr"]
// exec方法 返回的類陣列中 第0位 是  正則表示式相匹配的文字
// 第 1 位是第 1 個子表示式相匹配的文字,第 2 位是第 2 個子表示式相匹配的文字
// 以此類推

String 物件的方法

stringObject.match(regexp/substr)

match() 方法可在字串內檢索指定的值,或找到一個或多個正則表示式的匹配。
該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字串的位置。

var reg = /(\w)\1(\w)\2/;
var reg2 = /(\w)\1(\w)\2/g; // 帶引數 g 全域性匹配
var str = "aacc bbff aar";
console.log(    str.match(reg)    ); //  ["aacc", "a", "c", index: 0, input: "aacc bbff aar"]
console.log(    str.match(reg2)    ); // ["aacc", "bbff"]
// 不帶 g (全域性匹配)時,返回  正則表示式相匹配的文字 和 子表示式相匹配的文字
// 帶 g (全域性匹配)時,只返回  正則表示式相匹配的文字

stringObject.search(regexp/substr)

search() 方法用於檢索字串中指定的子字串,或檢索與正則表示式相匹配的子字串。
引數可以是字串或正則表示式

var reg = /ab/g;
var str = "ababab";
var str2 = "aaa";
console.log(    str.search(reg)    );  // 0
console.log(    str2.search(reg)    );  // -1

search() 方法不執行全域性匹配,它將忽略標誌 g,只返回 stringObject 的第一個匹配的位置。
沒有找到任何匹配的子串,則返回 -1。

stringObject.split(regexp/substr)

split() 方法用於把一個字串分割成字串陣列。
引數可以是字串或正則表示式

var reg = /\d\d/;
var str = "a11b34bb";
console.log(    str.split(reg)    );  //["a", "b", "bb"]

stringObject.replace(regexp/substr,replacement)

replace() 方法用於在字串中用一些字元替換另一些字元,或替換一個與正則表示式匹配的子串。

var str = "aaa";
console.log(    str.replace('a','b')    );  //baa (查詢替換子字串時,只執行一次)

var reg = /a/g;
var str = "aaa";
console.log(    str.replace(reg,'b')    );  //bbb

replacement 中的 $ 字元具有特定的含義。
$1、$2、…、$99 與 regexp 中的第 1 到第 99 個子表示式相匹配的文字。
$& 與 regexp 相匹配的子串。
$` 位於匹配子串左側的文字。
$’ 位於匹配子串右側的文字。
$$ 直接量符號。

var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
console.log(    str.replace(reg,"$2$2$1$1")    );  //bbaa

replacement 可以是字串,也可以是函式。replacement是函式,則第一個形參表示正則表示式相匹配的文字,後面的形參就依次是子表示式相匹配的文字

var reg = /(\w)\1(\w)\2/g;
var str = "aabb3ccdd";
console.log(    str.replace(reg,function($,$1,$2){  //形參可自定
	console.log($);
	console.log($1);
	console.log($2);
	return $2 + $2 + $1 + $1;
})    );  

// aabb
// a
// b
// ccdd
// c
// d
// bbaa3ddcc

例子:變成小駝峰寫法

var reg = /-(\w)/g;
var str = "the-first-name"; 
console.log(    str.replace(reg,function($,$1){  
	return $1.toUpperCase();
})    ); 

例子:字串去重

var reg = /(\w)\1*/g;
var str = "aaaaabaaabbbbbcccc"; 
console.log(    str.replace(reg,"$1")    );  //ababc

例子:字串數字科學技術法

var reg = /\B(?=(\d{3})+$)/g;
var str = "100000000";

console.log(    str.match(reg)    );  
// ["", ""] 目的是去匹配 後面緊跟 3的倍數位數字 的空

console.log(    str.replace(reg,'.')    );  
//100.000.000  把空替換成.  \B 非單詞邊界 以防成 .100.000.000

相關推薦

JavaScript RegExp表示式

轉義符號 \(反斜槓) \n(字串換行) \\(字串\) \?(字串?) 建立正則表示式 1、語法/pattern/attributes 引數 pattern 是一個字串,指定了正則表示式的模式。 引數 attributes 是一個可選的字串,包含屬性 “i”、

Python/Pandas-字串與

split拆分常和strip使用 val='a,b,guido' val.split(',') ['a', 'b', 'guido'] pieces=[ x.strip() for x in val.split(',')] pieces ['a', '

搭建ELK(ElasticSearch+Logstash+Kibana)日誌分析系統 logstash grok 解析日誌

摘要 這一節補充一下logstash使用grok正則解析日誌 Grok 是 Logstash 最重要的外掛。通過在filter中使用grok,可以把日誌中的關鍵字匹配出來。 grok正則主要有兩部分: 一是grok自帶的grok模式表示式,即是gr

前端—— JavaScript基礎:Number、Date類、字串、陣列、Math類、

JS常用類:Number類、Date類、Math類、字串、陣列、正則 一、Number 1、常用數字 整數:10 小數:3.14 科學計數法:1e5 | 1e-5 正負無窮:Infinity | -Infinity 2、常用進位制 二進位制:0b1010 以0b開頭 八進位制:012 以0

全棧JavaScript之路HTML5 中與class屬性相關的擴充

mov html5 表示 方法 popu dom add data- token 1. getElementByClassName() :支持getElementsByClassName()方法的瀏覽器有IE 9+、Firefox 3+、Safari

javascript使用表示式獲取查詢字串QueryString轉載

該方法大小寫敏感 <script> function fnOnload() { document.getElementById("SystemTree").src = "TreeList.aspx?PID=" + GetQueryString("PID");

Linux學習之一egrep及擴充套件表示式egrep

一、egrep及擴充套件正則表示式:     REGEXP:REGular EXPression          1、正則表示式:         Basic REGEXP:基本正則表示式         Extended REGEXP:擴充套件正則表示式     2、擴

從零開始學習html單位和值

type 當我 總結 學生 專註 bfc span blog 設置顏色 一、顏色值 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5

自然語言交流系統 phxnet團隊 創新實訓 個人博客

reg ssa then soci mile pic fin lan tle 關於WikiExtractor的學習筆記: WikiExtractor是一個Python 腳本,專門用於提取和清洗Wikipedia的dump數據,支持Python 2.7 或者 Pyth

Hibernate中的多表操作4:單向一對一

odin utf-8 lds () clas string 方式 rdb style 案例一: 註解方式實現一對一 UserBean.java package bean; import java.io.Serializable; import javax.pers

openstack controller ha測試環境搭建記錄——配置cinder存儲節點

nbsp 設置 ntp reason script snap rate 文件 esc 先簡述cinder存儲節點的配置: 1、IP地址是10.0.0.41; 2、主機名被設置為block1; 3、所有節點的hosts文件已添加相應條目; 4、已經配置了ntp時間同

OGG運維優化腳本-信息同步類--定義文件自動下發

ogg oracle goldengate 腳本 數據同步 shell 文件: resend.sh路徑:$HOME/ggscript/ggdef功能:該腳本為用於應對目標端因為定義文件失效導致的進程異常中斷所設計因源端業務經常未通知目標端以及系統組自行修改表結構因此設計該腳本自動生成定

CSS學習-CSS顏色之中的一個

rac 顏色 opacity bsp pac pre alpha color data- 一、理論: 1.RGB色彩模式 a.CMYK色彩模式 b.索引色彩模式 (主要用於web) c.灰度模式 d.雙色調模式 2.opacity: a.alphavalue:透明

Linux筆記 - 日誌管理

關機 ron pri 內核 有用 規則 rsyslog 所有者 事件 (1)rsyslogd的服務:查看服務是否啟動:ps aux | grep rsyslogd 查看服務是否自啟動:chkconfig --list | grep rsyslog 配置文件 : /etc/r

如鵬網學習筆記ASP.NET

表單參數 form表單 web服務 exp 序列化 date 文字 arr 處理程序 Asp.net筆記 一、Socket類   進行網絡編程的類,可以在兩臺計算機之間進行網絡通訊   過程:     向服務器發送指令:     GET /index.html HTTP

python selenium-webdriver 標簽頁切換

例子 int 道理 .get es2017 http code 按鈕 style   測試過程中有時候會遇到點擊某個按鈕或者鏈接會彈出新的窗口,這時候我們的操作的頁面還保持著最初打開頁面,但是此時我們需要操作新打開的頁面上的功能,這個時候我們需要切換一下標簽頁 。   其

設計模式——組合模式

其他 獲取 添加 http es2017 處理方式 src 所有 alt 1.描述 將對象組合成樹形結構一以表示“部分——整體”的層次結構。組合模式使用戶對單個對象和組合對象的使用具有一致性。 2.模式的使用 ·抽象組件(Component):是一個接口或抽象類,該接口定義

MySQL之數據備份與還原

pic 還原 mysql .com ace sql .cn uid 數據備份 http://pic.cnhubei.com/space.php?uid=4614&do=album&id=1719909http://pic.cnhubei.com/space.

HadoopMapReduce原理分析

資源 並行處理 ons 描述 並發數 span col 數據分析 sub 前言   上一篇我們分析了一個MapReduce在執行中的一些細節問題,這一篇分享的是MapReduce並行處理的基本過程和原理。   Mapreduce是一個分布式運算程序的編程框架,是用戶開發

Java框架spring Boot學習筆記:log4j介紹

inf alt 技術分享 images 使用 image 詳細 配置文件 -128 功能 日誌功能,通過log4j可以看到程序運行過程的詳細信息。 使用 導入log4j的jar包 復制log4j的配置文件,復制到src下面         3.設置日誌級別