程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 快速熟悉正則表達式

快速熟悉正則表達式

編輯:C#基礎知識

在日常工作中,我們經常寫正則表達式,比如在表單中經常用來驗證用戶輸入的格式是否正確,我們就會用到正則表達式;可以把正則表達式看做是可以描述問題的語言,它就是專門為模式匹配而設計的


正則表達式的語法

可以簡單粗暴得把正則表達式理解為查找東西,舉個例子:要在"Hello World"中找到"world"這個單詞,先用直白的語言來描述就是查找"從w開頭到d結束的字母組合",使用正則來描述就是\bw\w*d\b,這個就是模式字符串,它由元字符和字面量字符組成

  • 常見的元字符如下:
  • 正則表達式中的旗標
  • 正則表達式中的轉義字符

JS中的正則表達式

  • 兩種生成方式,舉例:匹配0-9有沒有出現

1、通過RegExp var reg=new RegExp('^[0-9]','g');
2、通過表達式字面量 var reg=/^[0-9]/g;

  • 兩種常用的方法test()、exec()

1、test方法:如果輸入字符串與模式相匹配,test就返回真,沒有則返回假
2、exec方法:如果輸入字符串與模式匹配,則返回一個數組,沒有匹配就返回null

/*test()方法,匹配是否有出現0-9*/
var reg1=/^[0-9]/;
reg1.test('There is no number');
//返回結果為false

/*exec()方法,匹配句子裡面的單詞,兩個單詞一組*/
/*沒有設置全局旗標*/
var reg2=/(\w+)\s(\w+)/;
reg2.test('There is no number');
//返回結果['There is','There','is']
//第0個元素是匹配的字符串,後面兩個元素分別是分組引用的子字符串

/*設置全局旗標*/
var reg3=/(\w+)\s(\w+)/g;
reg3.test('There is no number');
//設置了全局旗標的話,exec()會循環尋找
//第一次查找結果['There is','There','is'],第二次結果['no number','no','number'],第三次結果null

exec()方法如果設置了全局旗標,在循環中使用必須要手動設置其reg.lastIndex = 0;,否則它會間隔匹配


字符串對象與正則表達式

  • 在string對象中有不少以正則表達式對象作為參數的方法
屬性 說明 match(regexp) 返回正則表達式regexp的匹配結果 replace(searchValue,replaceValue) 將searchValue(正則表達式或是字符串值)
替換為replaceValue,並返回響應的字符串 search(regexp) 返回正則表達式regexp匹配位置的下標,沒有匹配就返回-1 split(separator,limit) 通過參數separator(字符串或是正則表達式)
對字符串進行分割,並返回一個字符串數組
  • match方法會返回元素與模式相匹配的字符串的數組,設置全局旗標時,會返回所有與模式相匹配的字符串數組,不設置時和exec方法相同

應用例子:

var text='abc def ghi jkl';

//設置全局旗標
text.match(/\w+/g);
//["abc","def","ghi","jkl"]

//不設置全局旗標
text.match(/(\w+)\s(\w+)/);
//["abc def","abc","def"]
  • replace方法返回被替換的字符串,如果設置了全局旗標,則替換全部匹配了的字符串,否則只替換第一個匹配的字符串;replace中如果第一個參數用了分組,第二個參數能夠通過符號來標識分組的前向引用

應用例子:

var text="abc def ghi jkl";

//將空格替換為字符
text.replace(/\s/,',');
//"abc,def ghi jkl"

text.replace(/\s/g,',');
//"abc,def,ghi,jkl"

//對空格之前的字符分組,用逗號替換並前向移動一位
text.replace(/(.)\s/g,",$1");
//"ab,cde,fgh,igkl"
  • 在search與split方法中,正則表達式的全局旗標不起作用
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved