文法規則計算式,用在字串的符合計算,可以作子字串的搜尋,替換。
\ | ^ | $ | * | + | ? | . | (x) | (?:x) | x(?=y) |
x(?!y) | x|y | {n} | {n,} | {n,m} | [xyz] | [^xyz] | [\b] | \b | \B |
\cX | \d | \D | \f | \n | \r | \s | \S | \t | \v |
\w | \W | \n | \0 | \xhh | \uhhhh |
產生一個文法規則計算式(Regular Expression)的物件,用作文字模式的演算。文法規則計算式有兩種宣告法:
var regex = new RegExp("文法規則計算式" [, "字旗"]);
var literal = /文法規則計算式/[字旗];
使用 RegExp 物件製造器時,字母 ”\” 必須加上脫離字母,也就是寫成”\\”。
- 程式用法:
<script type='text/javascript'>
var re=new RegExp("\\s", 'ig');
var rg=/\s/gi;
document.write( typeof re +' : '+ re +'<br />');
document.write( typeof rg +' : '+ rg );
</script> - 執行結果:
object : /\s/gi
object : /\s/gi
字旗可是下述字母的組合:
- g:全字串符合計算。沒設此旗時,只作第一個符合計算。
- i:大小寫視為相同。沒設此旗時,大小寫不相同。
- m:在多行文字作符合計算。
- 程式用法:
<script type='text/javascript'>
var s='hello Look glove';
document.write( s.replace("l" , "." ) +'<br />');
document.write( s.replace(/l/ , "." ) +'<br />');
document.write( s.replace(/l/g , "." ) +'<br />');
document.write( s.replace(/l/gi , "." ) );
</script> - 執行結果:
he.lo Look glove
he.lo Look glove
he..o Look g.ove
he..o .ook g.ove
- replace() 是物件 String 的方法,會將字串中符合第一個參數的子字串,替換成第二個參數的字串。
脫離字母,有兩種用途:(一)一般文字母前面加了 \,表示是特別字。(二)特別字母前面加了 \,則以一般文字母處理。
文字行的開始位置。如果設了字旗 m,則每一個斷行,都是一個新的文字行開始位置。
- 程式用法:
<pre>
<script type='text/javascript'>
var s='Mad Max\nMark Mouse';
document.write( s.replace(/^M/g, 'S' ) +'<p>');
document.write( s.replace(/^M/gm, 'S' ) );
</script>
</pre> - 執行結果:
Sad Max Mark Mouse
Sad Max Sark Mouse
文字行的尾端。如果設了字旗 m,則每一個斷行之前,都是一個文字行尾端。
- 程式用法:
<script type='text/javascript'>
var s='Mad Sam';
document.write( s.replace(/M$/gi, 'd' ) );
</script> - 執行結果:
Mad Sad
符合發生 0 次或更多次。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/el*/ig, 'x' ) );
</script> - 執行結果:
Hxo Wxndy
符合發生 1 次或更多次。等於 {1,}。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/el+/ig, 'x' ) );
</script> - 執行結果:
Hxo Wendy
符合發生 0 次或 1次。將 ? 接在 *, +, ?, {} 之後,會變成不貪心模式,只求最小符合字串。否則為貪心模式,求最大符合字串。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/el?/ig, 'x' ) +'<br />');
document.write( s.replace(/el+/ig, 'x' ) +'<br />');
document.write( s.replace(/el+?/ig, 'x' ) +'<br />');
document.write( s.replace(/el*/ig, 'x' ) +'<br />');
document.write( s.replace(/el*?/ig, 'x' ) );
</script> - 執行結果:
Hxlo Wxndy
Hxo Wendy
Hxlo Wendy
Hxo Wxndy
Hxllo Wxndy
除了 \n \r \u2028 \u2029 的任一字母。[\s\S] 是所有字母的集合,也包括前述換行字碼。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/e./ig, 'x' ) );
</script> - 執行結果:
Hxlo Wxdy
此名為存入括號。計算文法規則 x,符合的子字串存入結果陣列,取值可用 [1], ..., [n] 或用物件的特徵 $1, ..., $9。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/(e.).*(d.)/, 'x' ) +'<br />');
document.write( RegExp.$1 +' '+ RegExp.$2);
</script> - 執行結果:
Hx
el dy
計算符合 x,但是不存入結果陣列。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/(?:e.).*(d.)/, 'x' ) +'<br />');
document.write( RegExp.$1 +' - '+ RegExp.$2);
</script> - 執行結果:
Hx
dy -
x 符合的條件要加上 x 之後必須接 y。雖然 y 是符合條件之一,但是 y 並不會被替換。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/e(?=l)/gi, 'x' ) );
</script> - 執行結果:
Hxllo Wendy
x 符合的條件要加上 x 之後不可接 y。雖然 y 是符合條件之一,但是 y 並不會被替換。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/e(?!l)/gi, 'x' ) );
</script> - 執行結果:
Hello Wxndy
符合 x 或 y 都可以。不限兩個參數,例如 d|e|f|g...。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/e(?=(l|n))/gi, 'x' ) +'<br />');
document.write( s.replace(/(he|lo|dy)/gi, '12' ) );
</script> - 執行結果:
Hxllo Wxndy
12l12 Wen12
n 是正整數。符合正好發生 n 次。
- 程式用法:
<script type='text/javascript'>
var s='Helllllo Wendy';
document.write( s.replace(/el{2}/gi, 'x' ) +'<br />');
document.write( s.replace(/el{3}/gi, 'x' ) );
</script> - 執行結果:
Hxlllo Wendy
Hxllo Wendy
n 是正整數。符合發生 n 次或更多次。
- 程式用法:
<script type='text/javascript'>
var s='Hello helllllo Wendy';
document.write( s.replace(/el{2,}/gi, 'x' ) +'<br />');
document.write( s.replace(/el{3,}/gi, 'x' ) );
</script> - 執行結果:
Hxo hxo Wendy
Hello hxo Wendy
n, m 是正整數。符合發生至少 n 次,最多 m 次。
- 程式用法:
<script type='text/javascript'>
var s='Hello helllllo Wendy';
document.write( s.replace(/el{3,4}/gi, 'x' ) );
</script> - 執行結果:
Hello hxlo Wendy
字母集合。符合其中的字母。可用”-”表連續的字母,例如 [i-n] 等於 [ijklmn]。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/e[ln]/gi, 'x' ) );
</script> - 執行結果:
Hxlo Wxdy
不屬於字母集合中的字母。
- 程式用法:
<script type='text/javascript'>
var s='Hello Wendy';
document.write( s.replace(/e[^a-l]/gi, 'x' ) );
</script> - 執行結果:
Hello Wxdy
字碼,清除前一字。與下面的不同。
- 程式用法:
<script type='text/javascript'>
var s='Hell\bo Wendy';
document.write( s+'<br />'+
s.replace(/[\b]/gi, 'x' ) );
</script> - 執行結果:
Hello Wendy
Hellxo Wendy
字的邊界,也就是頭尾兩字母,接著空白字元或標點符號者。
- 程式用法:
<script type='text/javascript'>
var s='Hello, Joe Obama';
document.write( s.replace(/\bo/gi, 'x' ) +'<br />');
document.write( s.replace(/o\b/gi, 'x' ) +'<br />');
document.write( s.replace(/(\bo|o\b)/gi, 'x' ) );
</script> - 執行結果:
Hello, Joe xbama
Hellx, Joe Obama
Hellx, Joe xbama
不是字的邊界,也就是不接著空白字元或標點符號者。
- 程式用法:
<script type='text/javascript'>
var s='Hello, Joe Obama';
document.write( s.replace(/\Bo/gi, 'x' ) +'<br />');
document.write( s.replace(/\Bo\B/gi, 'x' ) );
</script> - 執行結果:
Hellx, Jxe Obama
Hello, Jxe Obama
控制字母,X 由 A 到 Z。
數字,等於 [0-9]。
- 程式用法:
<script type='text/javascript'>
var s='give me 5!';
document.write( s.replace(/\d/gi, 'x' ) );
</script> - 執行結果:
give me x!
拉丁字母中的非數字,等於 [^0-9]。
- 程式用法:
<script type='text/javascript'>
var s='give me 5!';
document.write( s.replace(/\D/gi, 'x' ) );
</script> - 執行結果:
xxxxxxxx5x
字碼,跳至下一頁。
- 程式用法:
<script type='text/javascript'>
var s='Hell\fo Wendy';
document.write( s+'<br />'+
s.replace(/\f/gi, 'x' ) );
</script> - 執行結果:
Hello Wendy
Hellxo Wendy
字碼,跳至新行。
- 程式用法:
<script type='text/javascript'>
var s='Hell\no Wendy';
document.write( s+'<br />'+
s.replace(/\n/gi, 'x' ) );
</script> - 執行結果:
Hell o Wendy
Hellxo Wendy
字碼,跳至行首。
- 程式用法:
<script type='text/javascript'>
var s='Hell\ro Wendy';
document.write( s+'<br />'+
s.replace(/\r/gi, 'x' ) );
</script> - 執行結果:
Hell o Wendy
Hellxo Wendy
單一空白字元,包括空白字,TAB,跳頁,跳行,及獨角碼的空白。等於[\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]。
- 程式用法:
<script type='text/javascript'>
var s='Hell\f\n\ro W end\u3000y';
document.write( s+'<br />'+
s.replace(/\s/gi, 'x' ) );
</script> - 執行結果:
Hell o W end y
HellxxxoxWxendxy
單一非空白字元。
- 程式用法:
<script type='text/javascript'>
var s='Hell\f\n\ro W end\u3000y';
document.write( s+'<br />'+
s.replace(/\S/gi, 'x' ) );
</script> - 執行結果:
Hell o W end y
xxxx x x xxx x
字碼,tab。
- 程式用法:
<script type='text/javascript'>
var s='Hell\to Wendy';
document.write( s+'<br />'+
s.replace(/\t/gi, 'x' ) );
</script> - 執行結果:
Hell o Wendy
Hellxo Wendy
字碼,垂直跳行。
- 程式用法:
<script type='text/javascript'>
var s='Hell\vo Wendy';
document.write( s+'<br />'+
s.replace(/\v/gi, 'x' ) );
</script> - 執行結果:
Hello Wendy
Hellxo Wendy
英文大小寫字母,數字,底線”_”。等於 [A-Za-z0-9_]。
- 程式用法:
<script type='text/javascript'>
var s='give me 5!';
document.write( s.replace(/\w/gi, 'x' ) );
</script> - 執行結果:
xxxx xx x!
字母不屬於英文大小寫字母,數字,底線”_”。等於 [^A-Za-z0-9_]。
- 程式用法:
<script type='text/javascript'>
var s='give me 5!';
document.write( s.replace(/\W/gi, 'x' ) );
</script> - 執行結果:
givexmex5x
n 是正整數,表第 n 個存入括號。將前面第 n 個存入陣列中的符合子字串,當作文法規則。
- 程式用法:
<script type='text/javascript'>
var s=":joe =456 @456";
document.write( s.replace(/:([a-zA-Z]+)\s+=(\d+)\s+@\2/, 'x' ) +'<br />');
document.write( RegExp.$1 +' '+ RegExp.$2 +'<p>');
document.write( s.replace(/:([a-zA-Z]+)\s+=(\d+)\s+@\1/, 'x' ) +'<br />');
document.write( RegExp.$1 +' '+ RegExp.$2);
</script> - 執行結果:
x
joe 456:joe =456 @456
joe 456
空字元。其後不要接數字。
- 程式用法:
<script type='text/javascript'>
var s='Hell\0o Wendy';
document.write( s+'<br />'+
s.replace(/\0/gi, 'x' ) );
</script> - 執行結果:
Hello Wendy
Hellxo Wendy
ASCII 碼,兩位 16 進位數。
- 程式用法:
<script type='text/javascript'>
var s='Hell\x3do Wendy';
document.write( s+'<br />'+
s.replace(/\x3d/gi, 'x' ) );
</script> - 執行結果:
Hell=o Wendy
Hellxo Wendy
獨角碼,四位 16 進位數。
- 程式用法:
<script type='text/javascript'>
var s='Hell\u3041o Wendy';
document.write( s+'<br />'+
s.replace(/\u3041/gi, 'x' ) );
</script> - 執行結果:
Hellぁo Wendy
Hellxo Wendy