RegExp

作者: 土乒76 | 来源:发表于2017-05-24 12:34 被阅读15次

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

相关文章

网友评论

    本文标题:RegExp

    本文链接:https://www.haomeiwen.com/subject/amgnxxtx.html