一 為什么要用正則表達式?
以提取字符串中的數(shù)字為例.
如果用傳統(tǒng)字符串操作,代碼如下
// 傳統(tǒng)字符串操作
var str = '12,87 76 -ddf e dd 89 ff76 9';
var arr = [];
var tmp = '';
var i = 0;
for (i = 0;i<str.length;i++) {
if (str.charAt(i)>='0' && str.charAt(i)<='9') {
tmp += str.charAt(i);
} else {
if (tmp) {
arr.push(tmp);
tmp='';
}
}
}
if (tmp) {
arr.push(tmp);
tmp='';
}
alert(arr) // 12,87,76,89,76,9
而使用正則表達式,只需要下面這幾句代碼
// 正則表達式
var str = '12,87 76 -ddf e dd 89 ff76 9';
var re = /\d+/g;
alert(str.match(re)); // 12,87,76,89,76,9
二 正則表達式能做什么?
操作字符串.(也是它唯一能做的.)
三 正則表達式與字符串操作配合使用
var str = 'abcdef';
var re = /a/; // 檢測字符串里是否包含a
var re = /a/i; // 檢測字符串里是否包含a,并且忽略大小寫,i代表ignore
alert(re.test(str)); // true
// 正則與search配合
var str = 'asdf 443 vczxv 55';
var re = /\d/; // \d 在正則里就表示數(shù)字
alert(str.search(re)); // 5 因為第一個數(shù)字出現(xiàn)在5這個位置
// 正則與match配合
var str = 'sdf e443 fedef 55 66gg dff 99';
var re = /\d/;
alert(str.match(re)); // 4 即只返回了第一個數(shù)字
re = /\d/g; // g代表global,即找到全部的數(shù)字
alert(str.match(re)); // 4,4,3,5,5,6,6,9,9 即返回了所有數(shù)字
re = /\d\d/g;
alert(str.match(re)); // 44,55,66,99 因為有兩個/d,所以計算機會兩個兩個的分割
re = /\d+/g; // \d+ 代表多個數(shù)字,任意長度
alert(str.match(re)); // 443,55,66,99
// 正則與replace配合
var str = 'abacdAef';
alert(str.replace('a', 'T')); // Tbacdef 即只會替換掉第一個a
alert(str.replace(/a/g, 'T')); // TbTcdAef 即替換了所有a
alert(str.replace(/a/gi, 'T')); // TbTcdTef 即替換了所有a,且忽略大小寫,注意:gi和ig都行,順序無所謂
四 正則表達式常見應(yīng)用---敏感詞過濾
window.onload = function () {
var txt1 = document.getElementById('txt1');
var txt2 = document.getElementById('txt2');
var btn = document.getElementById('btn1');
btn.onclick = function() {
var re = /我們|你們|他們/g;
txt2.value = txt1.value.replace(re, '**');
}
}
效果如下,一點擊過濾按鈕,敏感詞就被替換成**了.
敏感詞過濾示例.png