JavaScript中的Regex

來源:互聯網
上載者:User
Regex(regular expression)對象包含一個Regex模式(pattern)。它具有用Regex模式去匹配或代替一個串(string)中特定字元(或字元集合)的屬性(properties)和方法(methods)。 要為一個單獨的Regex添加屬性,可以使用Regex建構函式(constructor function),無論何時被調用的預設定的Regex擁有靜態屬性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得對不對,將原文列出,請自行翻譯)。

  • 建立:
    一個文字格式設定或Regex建構函式
    文字格式設定: /pattern/flags
    Regex建構函式: new RegExp("pattern"[,"flags"]);
  • 參數說明:
    pattern -- 一個Regex文本
    flags -- 如果存在,將是以下值:
    g: 全域匹配
    i: 忽略大小寫
    gi: 以上組合

[注意] 文字格式設定的參數不用引號,而在用建構函式時的參數需要引號。如:/ab+c/i new RegExp("ab+c","i")是實現一樣的功能。在建構函式中,一些特殊字元需要進行轉意(在特殊字元前加"")。如:re = new RegExp("\w+")

Regex中的特殊字元

字元 含意

做為轉意,即通常在""後面的字元不按原來意義解釋,如/b/匹配字元"b",當b前面加了反斜杆後//,轉意為匹配一個單詞的邊界。
-或-
對Regex功能字元的還原,如"*"匹配它前面元字元0次或多次,/a*/將匹配a,aa,aaa,加了""後,/a*/將只匹配"a*"。

^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
$ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字元0次或多次,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字元1次或多次,/ba*/將匹配ba,baa,baaa
? 匹配前面元字元0次或1次,/ba*/將匹配b,ba
(x) 匹配x儲存x在名為$1...$9的變數中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字元集(character set),匹配這個集合中的任一一個字元(或元字元)
[^xyz] 不匹配這個集合中的任何一個字元
[] 匹配一個退格符
匹配一個單詞的邊界
B 匹配一個單詞的非邊界
cX 這兒,X是一個控制符,/cM/匹配Ctrl-M
d 匹配一個字數字元,/d/ = /[0-9]/
D 匹配一個非字數字元,/D/ = /[^0-9]/
匹配一個分行符號
匹配一個斷行符號符
s 匹配一個空白字元,包括 , ,f, ,v等
S 匹配一個非空白字元,等於/[^ f v]/
匹配一個定位字元
v 匹配一個重直定位字元
w 匹配一個可以組成單詞的字元(alphanumeric,這是我的意譯,含數字),包括底線,如[w]匹配"$5.98"中的5,等於[a-zA-Z0-9]
W 匹配一個不可以組成單詞的字元,如[W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。

說了這麼多了,我們來看一些Regex的實際應用的例子:

E-mail地址驗證:
 function test_email(strEmail) {
  var myReg = /^[_a-z0-9]+@([_a-z0-9]+.)+[a-z0-9]{2,3}$/;
  if(myReg.test(strEmail)) return true;
  return false;
 }
HTML代碼的屏蔽
 function mask_HTMLCode(strInput) {
   var myReg = /<(w+)>/;
   return strInput.replace(myReg, "&lt;$1&gt;");
 }

Regex對象的屬性及方法
  預定義的Regex擁有有以下靜態屬性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以預設定。其他屬性的值在執行過exec或test方法後被根據不同條件賦以不同的值。許多屬性同時擁有長和短(perl風格)的兩個名字,並且,這兩個名字指向同一個值。(javascript類比perl的Regex)
Regex對象的屬性

屬性 含義
$1...$9 如果它(們)存在,是匹配到的子串
$_ 參見input
$* 參見multiline
$& 參見lastMatch
$+ 參見lastParen
$` 參見leftContext
$          參見rightContext
constructor    建立一個對象的一個特殊的函數原型
global       是否在整個串中匹配(bool型)
ignoreCase     匹配時是否忽略大小寫(bool型)
input        被匹配的串
lastIndex     最後一次匹配的索引
lastParen     最後一個括弧括起來的子串
leftContext    最近一次匹配以左的子串
multiline     是否進行多行匹配(bool型)
prototype     允許附加屬性給對象
rightContext    最近一次匹配以右的子串
source       Regex模式
lastIndex     最後一次匹配的索引


Regex對象的方法

方法 含義
compile      Regex比較
exec        執行尋找
test        進行匹配
toSource      返回特定對象的定義(literal representing),其值可用來建立一個新的對象。重載Object.toSource方法得到的。
toString      返回特定對象的串。重載Object.toString方法得到的。
valueOf      返回特定對象的原始值。重載Object.valueOf方法得到

例子
<script language = "javascript">
var myReg = /(w+)s(w+)/;
var str  = "John Smith";
var newstr = str.replace(myReg, "$2, $1");
document.write(newstr);
</script>
將輸出"Smith, John"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.