RegExp

Search

var str = 'abcdef';
console.log(str.search('bc'));// 1
console.log(str.search('g'));// -1

可以配合正則使用

var str = 'abcdef';
console.log(str.search('c'));// 2

console.log(str.search(/C/i));// 找到返回位置2
var str = 'abcd 443 gdfg 55';
var reg = /\d/;
console.log( str.search(reg) );// 5,第一個數字4出現在第5個位置

檢測瀏覽器

var str = window.navigator.userAgent;
if(str.search(/firefox/i) != -1) {// 找到了
    console.log('火狐');
}
else if(str.search(/chrome/i) != -1) {
    console.log('Chrome');
}
else {
    console.log('不知道');
}

Substring

var str = 'abcdef';
console.log(str.substring(1, 4));// bcd
console.log(str.substring(1));// bcdef

CharAt

var str = 'abcdef';
console.log(str.charAt(0));

Split

var str = 'a-b-c-d-e-f';
console.log(str.split('-'));// ["a", "b", "c", "d", "e", "f"]

str.match

挑出字符串中的數字

var str = "12,87 76 -ddf e ef 89 ff76 9";
// 普通版
var arr = [];
var temp = '';
for(var i=0; i<str.length; i++) {
    if(str.charAt(i) >= '0' && str.charAt(i) <= '9') {
        temp += str.charAt(i);
    }
    else{
        if(temp) {
            arr.push(temp);
            temp = "";
        }
    }
}
// 最后一個是數字,但不會走for中的else了,這里再判斷一次
if(temp) {
    arr.push(temp);
    temp = "";
}
console.log(arr);// ["12", "87", "76", "89", "76", "9"]

正則版

var reg = /\d+/g;
console.log(str.match(reg));

再舉個例子

var str = 'sdfs 43 fdsf 454 66gg dff 99';
var reg = /\d/;
console.log( str.match(reg) );// ["4", index: 5, input: "sdfs 43 fdsf 454 66gg dff 99"]

var reg = /\d/g;
console.log( str.match(reg) );// ["4", "3", "4", "5", "4", "6", "6", "9", "9"]

var reg = /\d+/g;
console.log( str.match(reg) );// ["43", "454", "66", "99"]

RegExp的兩種寫法

var str = 'Abcdef';
// JS風格
var reg = new RegExp('a', 'i');
console.log(reg.test(str));// true

// perl風格
var reg2 = /a/i;
console.log(reg2.test(str));

Replace

var str = "abadAf";
var newStr = str.replace("a", "T");
console.log(newStr);// Tbadef

var newStr = str.replace(/a/gi, "T");
console.log(newStr);// TbTdTf

敏感詞過濾

轉換前<textarea name="" id="" cols="30" rows="10"></textarea><br>
<input type="button" value="過濾" id="btn1"><br>
轉換后<textarea name="" id="" cols="30" rows="10"></textarea>
<script>
var oBtn = document.getElementById("btn1");
var aText = document.getElementsByTagName("textarea");

oBtn.onclick = function() {
    var reg = /我們|你們|他們/g;
    
    aText[1].value = aText[0].value.replace(reg, "***");
};
</script> 

常用簡寫

var str = '1a2 abc ee 1b2 1c2';
// var reg = /1a2|1b2|1c2/;
var reg = /1[abc]2/g;

console.log(str.match(reg));// ["1a2", "1b2", "1c2"]

// [a,b]:a或者,或則b
// [12 34]:1或者2或者空格或者3或者4,只是指單個字符

// [0-9]
// [a-z]
// [0-9a-z]
// \d == [0-9]
// 
// [^a]:除了a以外的所有東西都可以
// [^0-9a-z]:除了0-9和a-z都可以
// \d:digital
// \w:[a-z0-9_]數字字母和下劃線

var str = '  fd dfsf d d   ff  ';
var newStr = str.replace(/\s/g, "");
console.log(newStr);

// -D:[^0-9]非數字
// -W:[^a-z0-9_]
// \S:除了空格

去除HTML標簽

<textarea name="" id="txt1" cols="40" rows="10"></textarea>
<input type="button" value="轉換" id="btn1">
<textarea name="" id="txt2" cols="40" rows="10"></textarea>
<script>
var oTxt1 = document.getElementById("txt1");
var oTxt2 = document.getElementById("txt2");
var oBtn = document.getElementById("btn1");

// <div id="aaa"></div>
oBtn.onclick = function() {
    // 天生貪婪
    // var reg = /<.+>/g;
    var reg = /<[^<>]+>/g;// 左右尖括號中間什么都能出現,就是不能有左右尖括號
    
    oTxt2.value = oTxt1.value.replace(reg, "");
};
</script>

量詞

// {n,m}:最少出現n次,最多m次
// {n}:最多不限
// {,n}:最少不限
// {n}:正好n次

// + >> {1,}:最少一次
// * >> {0,}:零到任意次
// ? >> {0,1}:零次或1次

QQ號

// QQ:最少5位,最多11位,第一位不是0
// [1-9]\d{4,10}
var str = "我的QQ是:2482343438,你的是9954334嗎?";
var reg = /[1-9]\d{4,10}/g;// [4,10]逗號后面不要有空格,例如[4, 10]

console.log(str.match(reg));// ["2482343438", "9954334"]

校驗郵箱

// iamajser_123@126aaa.com
// 一串字母數字下劃線@一串字母數字.2到4位的字母
// var reg = /\w+@[a-z0-9]+\.[a-z]{2,4}/;// 一部分符合即可
var reg = /\w+@[a-z0-9]+\.[a-z]{2,4}/;// 從行首到行尾完全符合
var str = "iamajser_123@126aaa.csssssom";
console.log(reg.test(str));
console.log(str.match(reg));// ["iamajser_123@126aaa.com", index: 0, input: "iamajser_123@126aaa.com"]

去除收尾空格

var name = "   Aaa Yang   ";
var reg = /^\s+|\s+$/g;// 全局的行首或行尾的空格,中間的不算
var newName = name.replace(reg, "");
console.log(newName);

檢測中文

// [\u4e00-\u9fa5],漢字Utf8編碼的范圍
var reg = /[\u4e00-\u9fa5]/;
var str = 'abfdfdf 34 34 +== 45';
console.log(reg.test(str));// false,沒有中文

var str = "中fdsf";
console.log(reg.test(str));// true,有中文

getByClass

function getByClass(oParent, sClass) {
    var aEle = oParent.getElementsByTagName("*");
    var aResult = [];
    var reg = new RegExp('\\b'+sClass+'\\b', 'i');// \b是單詞邊界
    for(var i=0; i<aEle.length; i++) {
        /*if(aEle[i].className == sClass) {
            aResult.push(aEle[i]);
        }*/
        /*if(aEle[i].className.search(sClass) != -1) {// 為abox的class也會識別,不是我們想要的
            aResult.push(aEle[i]); 
        }*/
        if(reg.test(aEle[i].className)) {
            aResult.push(aEle[i]);
        }
    }
    return aResult;
}

單詞邊界

var reg = new RegExp('\\bAaayang\\b');// \b代表必須是單詞邊界,空格之類的

var reg = /\bAaayang\b/;

console.log(reg.test('my name is Aaayangs'));// false
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容