天天看點

js中 正則表達式

正則表達式使用具體解釋

  簡單介紹

  簡單的說,正則表達式是一種能夠用于模式比對和替換的強有力的工具。其作用例如以下:

  測試字元串的某個模式。比如,能夠對一個輸入字元串進行測試,看在該字元串是否存在一個電話号碼模式或一個信用卡号碼模式。這稱為資料有效性驗證。

  替換文本。能夠在文檔中使用一個正則表達式來辨別特定文字。然後能夠所有将其删除,或者替換為别的文字。

  依據模式比對從字元串中提取一個子字元串。能夠用來在文本或輸入字段中查找特定文字。

  基本的文法

  在對正則表達式的功能和作用有了初步的了解之後,我們就來詳細看一下正則表達式的文法格式。

  正則表達式的形式一般例如以下:

  /love/  當中位于“/”定界符之間的部分就是将要在目标對象中進行比對的模式。使用者僅僅要把希望查找比對對象的模式内容放入“/”定界符之間就可以。為了可以使使用者更加靈活的定制模式内容。正則表達式提供了專門的“元字元”。所謂元字元就是指那些在正則表達式中具有特殊意義的專用字元。可以用來規定其前導字元(即位于元字元前面的字元)在目标對象中的出現模式。

  較為經常使用的元字元包含: “+”, “*”。以及 “?

”。

  “+”元字元規定其前導字元必須在目标對象中連續出現一次或多次。

  “*”元字元規定其前導字元必須在目标對象中出現零次或連續多次。

  “?

”元字元規定其前導對象必須在目标對象中連續出現零次或一次。

  以下。就讓我們來看一下正則表達式元字元的詳細應用。

  /fo+/  由于上述正則表達式中包括“+”元字元。表示能夠與目标對象中的 “fool”, “fo”, 或者 “football”等在字母f後面連續出現一個或多個字母o的字元串相比對。

  /eg*/  由于上述正則表達式中包括“*”元字元,表示能夠與目标對象中的 “easy”, “ego”, 或者 “egg”等在字母e後面連續出現零個或多個字母g的字元串相比對。

  /Wil?

/  由于上述正則表達式中包括“?

”元字元,表示能夠與目标對象中的 “Win”, 或者“Wilson”,等在字母i後面連續出現零個或一個字母l的字元串相比對。

  有時候不知道要比對多少字元。為了能适應這樣的不确定性,正則表達式支援限定符的概念。

這些限定符能夠指定正則表達式的一個給定元件必需要出現多少次才幹滿足比對。

  {n} n 是一個非負整數。比對确定的 n 次。比如。'o{2}' 不能比對 "Bob" 中的 'o',可是能比對 "food" 中的兩個 o。

  {n,} n 是一個非負整數。至少比對 n 次。比如,'o{2,}' 不能比對 "Bob" 中的 'o'。但能比對 "foooood" 中的全部 o。

'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。

  {n,m} m 和 n 均為非負整數。當中n <= m。最少比對 n 次且最多比對 m 次。比如。"o{1,3}" 将比對 "fooooood" 中的前三個 o。

'o{0,1}' 等價于 'o?'。請注意在逗号和兩個數之間不能有空格。

  除了元字元之外。使用者還能夠精确指定模式在比對對象中出現的頻率。比如,/jim {2,6}/ 上述正則表達式規定字元m能夠在比對對象中連續出現2-6次。是以,上述正則表達式能夠同jimmy或jimmmmmy等字元串相比對。

  在對怎樣使用正則表達式有了初步了解之後,我們來看一下其他幾個重要的元字元的使用方式。

  \s:用于比對單個空格符,包含tab鍵和換行符;

  \S:用于比對除單個空格符之外的全部字元;

  \d:用于比對從0到9的數字;

  \w:用于比對字母。數字或下劃線字元;

  \W:用于比對全部與\w不比對的字元;

  . :用于比對除換行符之外的全部字元。

  (說明:我們能夠把\s和\S以及\w和\W看作互為逆運算)

  以下,我們就通過執行個體看一下怎樣在正則表達式中使用上述元字元。

  /\s+/ 上述正則表達式能夠用于比對目标對象中的一個或多個空格字元。

  /\d000/ 假設我們手中有一份複雜的財務報表,那麼我們能夠通過上述正則表達式輕而易舉的查找到全部總額達千元的款項。

  除了我們以上所介紹的元字元之外。正則表達式中還具有第二種較為獨特的專用字元,即定位符。定位符用于規定比對模式在目标對象中的出現位置。 較為經常使用的定位符包含: “^”, “$”, “\b” 以及 “\B”。

  “^”定位符規定比對模式必須出如今目标字元串的開頭

  “$”定位符規定比對模式必須出如今目标對象的結尾

  “\b”定位符規定比對模式必須出如今目标字元串的開頭或結尾的兩個邊界之中的一個

  “\B”定位符則規定比對對象必須位于目标字元串的開頭和結尾兩個邊界之内,

  即比對對象既不能作為目标字元串的開頭,也不能作為目标字元串的結尾。

  相同,我們也能夠把“^”和“$”以及“\b”和“\B”看作是互為逆運算的兩組定位符。舉例來說: /^hell/ 由于上述正則表達式中包括“^”定位符。是以能夠與目标對象中以 “hell”, “hello”或“hellhound”開頭的字元串相比對。 /ar$/ 由于上述正則表達式中包括“$”定位符。是以能夠與目标對象中以 “car”, “bar”或 “ar” 結尾的字元串相比對。 /\bbom/ 由于上述正則表達式模式以“\b”定位符開頭,是以能夠與目标對象中以 “bomb”, 或 “bom”開頭的字元串相比對。/man\b/ 由于上述正則表達式模式以“\b”定位符結尾。是以能夠與目标對象中以

“human”, “woman”或 “man”結尾的字元串相比對。

  為了可以友善使用者更加靈活的設定比對模式,正則表達式同意使用者在比對模式中指定某一個範圍而不局限于詳細的字元。

比如:

  /[A-Z]/  上述正則表達式将會與從A到Z範圍内不論什麼一個大寫字母相比對。

  /[a-z]/  上述正則表達式将會與從a到z範圍内不論什麼一個小寫字母相比對。

  /[0-9]/  上述正則表達式将會與從0到9範圍内不論什麼一個數字相比對。

  /([a-z][A-Z][0-9])+/ 上述正則表達式将會與不論什麼由字母和數字組成的字元串。如 “aB0” 等相比對。

  這裡須要提醒使用者注意的一點就是能夠在正則表達式中使用 “()” 把字元串組合在一起。

“()”符号包括的内容必須同一時候出如今目标對象中。是以,上述正則表達式将無法與諸如 “abc”等的字元串比對。由于“abc”中的最後一個字元為字母而非數字。

  假設我們希望在正則表達式中實作類似程式設計邏輯中的“或”運算。在多個不同的模式中任選一個進行比對的話。能夠使用管道符 “|”。

比如:/to|too|2/ 上述正則表達式将會與目标對象中的 “to”, “too”, 或 “2” 相比對。

  正則表達式中另一個較為經常使用的運算符,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規定目标對象中不能存在模式中所規定的字元串。

比如:/[^A-C]/ 上述字元串将會與目标對象中除A,B,和C之外的不論什麼字元相比對。

一般來說。當“^”出如今 “[]”内時就被視做否定運算符;而當“^”位于“[]”之外。或沒有“[]”時。則應當被視做定位符。

  最後,當使用者須要在正則表達式的模式中增加元字元,并查找其比對對象時,能夠使用轉義符“\”。比如:/Th\*/  上述正則表達式将會與目标對象中的“Th*”而非“The”等相比對。

  在構造正則表達式之後,就能夠象數學表達式一樣來求值,也就是說。能夠從左至右并依照一個優先級順序來求值。優先級例如以下:

  1.\ 轉義符

  2.(), (?:), (?=), [] 圓括号和方括号

  3.*, +, ?, {n}, {n,}, {n,m} 限定符

  4.^, $, \anymetacharacter 位置和順序

  5.|“或”操作