欢迎光临散文网 会员登陆 & 注册

JS正则表达式:子表达式,反向引用,search和replace方法,面试题,g,i【诗书画唱】

2021-04-08 19:27 作者:诗书画唱  | 我要投稿

概括:

视频观看笔记

个人对子表达式的理解和运用

个人对search和replace方法的理解和运用 

个人对g和i的理解和运用

这里的\1,就是反向引用

使用反向引用来检查一个字符串中是否出现4个相同的数字

简单判断身份证号.html

1、判断一个7位数字是否是回文数字。(子表达式,捕获,反向引用)12321 56965


2、用js写一个函数,判断字符串是否是这样组成的:第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20。如果符合条件返回1,否则返回0。函数原型:function checkString(str)



3、以下函数的功能是查询浏览器url中字符串参数,请补全代码(这题是面试题

function parseQueryString(name) {

    var regexS = "[\\?&]" + name + "=([^&#]*)";

    var regx = new RegExp(regexS);

    var rs = regx.exec(_____________________________);

    if(rs == null) {

        return “”;

    }else{

        return ______________;  

    }

}

4、用正则表达式实现JS变量命名规则


5、“我的银行账号是xxxxx,我的电话号码是0731-888888”,将这段文本中的区号提取出来。

6、从一段文本中找到身份证号码,然后将生日提取出来。



课堂代码例子

提醒:

一些题目等等其实只要80%的功能实现,正确率就可以,因为一些题目有歧义,同时一些完整功能实现很繁琐,但其实面试官等等不要求给出繁琐的答案,他们只是考查部分的答案和实现方法等等你是否知道。

在正则表达式中要先判断是否是为确定长度的或规定的数字等等,如果是,就考虑加^和$。


其实很多都要考虑加^和$。


不加^和$的话,就表示一个字符串含有符合其正则表达式的内容就可以。加^和$的话,就表示一个字符串必须是符合其正则表达式的内容才可以

这个就是错误写法
这个是正确写法

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script>

var reg = /^(\d)(\d)(\d)\d\3\2\1$/;

console.log(reg.test('1234321'));


//不能以数字开头

//以数字字母下划线和$

var reg1 = /^[a-zA-Z_$][\w$]*$/;

console.log(reg1.test('a$'));


var reg2 = /^\d{6}(\d{8})\d{3}[\dx]$/;

console.log(reg2.exec(''));

</script>

</head>

<body>

</body>

</html>



面试题:


个人解析:在字符串中是要对问号进行2次转义的,用2个斜杠,第1个斜杆用于转义第2个斜杠,而被转义后的斜杠转义后面的问号。





视频观看笔记 START

个人对子表达式的理解和运用 START

//test方法的值是布尔类型的值

//exec方法返回值是一个数组

这里的\1,就是反向引用
使用反向引用来检查一个字符串中是否出现4个相同的数字



个人对子表达式的理解和运用 END

视频观看笔记 END




个人对search和replace方法的理解和运用 START

个人对g和i的理解和运用 START



正则表达式后面加g,在replace方法中体现作用,其他地方很少体现作用:

个人对g和i的理解和运用 END

个人对search和replace方法的理解和运用 END

1、判断一个7位数字是否是回文数字。(子表达式,捕获,反向引用)12321 56965

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>

var reg6 = /^(\d)(\d)(\d)(\d)\3\2\1$/;

var str4 = '3267623';

console.log(reg6.test(str4));

</script>

<body>

</body>

</html>


2、用js写一个函数,判断字符串是否是这样组成的:第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20。如果符合条件返回1,否则返回0。函数原型:function checkString(str)


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>


/*

 2、用js写一个函数,判断字符串是否是这样组成的:第一个必须是字母,

 后面可以是字母、数字、下划线,总长度为5-20。如果符合条件返回1,否则返回0。

 函数原型:function checkString(str)

*/


function checkString(str){



return /^[a-zA-Z]\w{4,19}$/.test(str) ? 1 : 0;

// return /^[a-zA-Z]\d{4,19}$/.test(str)?console.log(1):console.log(0)

}

// checkString("SSHC666")

</script>

<body>

</body>

</html>


3、以下函数的功能是查询浏览器url中字符串参数,请补全代码

function parseQueryString(name) {

    var regexS = "[\\?&]" + name + "=([^&#]*)";

    var regx = new RegExp(regexS);

    var rs = regx.exec(_____________________________);

    if(rs == null) {

        return “”;

    }else{

        return ______________;  

    }

}


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>


/*

3、以下函数的功能是查询浏览器url中字符串参数,请补全代码

function parseQueryString(name) {

    var regexS = "[\\?&]" + name + "=([^&#]*)";

    var regx = new RegExp(regexS);

    var rs = regx.exec(_____________________________);

    if(rs == null) {

        return “”;

    }else{

        return ______________;  

    }

}

*/

function parseQueryString(name) {

    var regexS = "[\\?&]" + name + "=([^&#]*)";

    var regx = new RegExp(regexS);

    var rs = regx.exec("http://localhost:8080/JavaWebProgram?act=诗书画唱&pwd=666888");

    if(rs == null) {

        return "";

    }else{

        return rs[1];  

    }

}


/* 测试语句:console.log(parseQueryString('act'));

console.log(parseQueryString('pwd'));*/

</script>

<body>

</body>

</html>



4、用正则表达式实现JS变量命名规则

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>

/*

4、用正则表达式实现JS变量命名规则*/


/*变量命名规则如下:

1、变量命名必须以字母、下划线”_”或者”$”为开头。其他字符可以是字母、_、美元符号或数字。

2、变量名中不允许使用空格和其他标点符号,首个字不能为数字。

3、变量名长度不能超过255个字符。

4、变量名区分大小写。(javascript是区分大小写的语言)

5、变量名必须放在同一行中

6、不能使用脚本语言中保留的关键字、保留字、true、false 和 null 作为标识符。

截止到目前为止JS描述了一组具有特定用途的关键字,一般用于控制语句的开始或结束,

或者用于执行特定的操作等。关键字也是语言保留的,不能用作标识符。

if for switch  case  break  continue  while  var  function

*/



/*关键字和保留字太多了,我只规定了部分关键字和保留字不能是js变量名,如果

 想js变量名不包含关键字和保留字,下面的/^(if|for|switch|case|break|continue|while

|var|function|true|false|null)$/.test(str)==false中的

 ^和$就别加上*/

function isJsName(str){


return /^([a-zA-Z]|_|\$)[\w|$]{0,255}$/.test(str)==true

&&(/^(if|for|switch|case|break|continue|while|var|function|true|false|null)$/.test(str)==false)? 

'符合JS变量命名规则':'不符合JS变量命名规则';


}


console.log(isJsName('$11'));

</script>

<body>

</body>

</html>


5、“我的银行账号是xxxxx,我的电话号码是0731-888888”,将这段文本中的区号提取出来。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>

/*


5、'我的银行账号是xxxxx,我的电话号码是0731-888888',将这段文本中的区号提取出来。*/

var z = /\d{4}/;

var s = '我的银行账号是xxxxx,我的电话号码是0731-888888';

var arr=z.exec(s);

console.log(arr[0]);

</script>

<body>

</body>

</html>



6、从一段文本中找到身份证号码,然后将生日提取出来。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>

/*


6、从一段文本中找到身份证号码,然后将生日提取出来。*/



/*身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X

 

 /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/  */


var reg = /(\d{17}(\d|X|x))/; 

var s ='身份证号码:66666620070717561x';

var arr=reg.exec(s);

console.log(arr[0].slice(6,14));


//.slice(7,13)

</script>

<body>


</body>

</html>

简单判断身份证号.html



<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>

function isCard(card) 

/*

 

 这里做简单的验证,真正0误差的验证很长,暂时不写。

 

 身份证号码的编排规则:(1)前1、2位数字表示:所在省份的代码; 

 (2)第3、4位数字表示:所在城市的代码; 

 (3)第5、6位数字表示:所在区县的代码; 

 (4)第7~14位数字表示:出生年、月、日; 

 (5)第15、16位数字表示:所在地的派出所的代码; 

 (6)第17位数字表示性别:奇数表示男性,偶数表示女性; 

 (7)第18位数字是校检码:

 也有的说是个人信息码,一般是随计算机的随机产生, 用来检验身份证的正确性。

 校检码可以是0~9的数字,有时也用x表示。*/




/*身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X*/

var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; 


if(reg.test(card) === false) 


return "身份证输入不合法"; 


else{



return "身份证输入合法";

}

}


console.log(isCard("66666620070717561x"))


</script>

<body>

</body>

</html>

课堂代码例子 START

<!DOCTYPE html>

<html>


<head>

<meta charset="UTF-8">

<title></title>

<script>

var s1 = /^ah+u$/;

var s2 = 'ahhhu';

//test方法的值是布尔类型的值

//console.log(s1.test(s2));

//exec方法返回值是一个数组

var reg1 = /[a-z]=(\d)/;

//console.log(reg1.test('nunenfbe=8yhgg'));

var rs = reg1.exec('pwd=123');

console.log('匹配的字符串片段是:' + rs[0]);

console.log('从下标为:' + rs['index'] + '的地方开始匹配');

console.log('被第一个子表达式捕获的值是:' + rs[1]);

console.log(rs);


var reg2 = /0731-?(\d{8})/;

            rs = reg2.exec('abc07318675458812345');

            console.log(rs[1]);

function parseQueryString(name) {

name = name.replace(/[\[]/,'\\[');

    var regexS = '[\\?&]' + name + '=([^&#]*)';

var regx = new RegExp(regexS);

var rs = regx.exec('http://localhost:8888/demo?act=admin&pwd=123');

    if(rs == null) {

return '';

}else{

    return rs[1];  

}

}

//console.log(parseQueryString('act'));

//console.log(parseQueryString('pwd'));


//普通字符串的两个跟正则表达式有关系的方法

//i:忽略大小写

//g:全字符串搜索

var reg3 = /[aeiou]/g;

var str1 = 'hello world';

//查找str1字符串中出现了aeiou字符的地方

console.log(str1.search(reg3));

//将str1字符串中出现的aeiou字符全部替换成@

console.log(str1.replace(reg3,'@'));


var reg4 = /co+m/i;

var str2 = 'www.Com';

console.log(str2.search(reg4));

console.log(str2.replace(reg4,'cn'));


var reg5 = /(\d)(\d)\d\1/;

var str3 = 'a3563b';

//reg5.test(str3);//\1=8,\2=6

//在表达式中再次使用\1中的值时就叫反向引用

//检查一个字符串中是否出现四个相同的数字

var reg6 = /(\d)\1{3}/;

var str4 = 'oip77755555321a';

console.log(reg6.test(str4));

//判断输入的五位数字是不是回文数字

</script>

</head>


<body>

</body>


</html>

课堂代码例子 END


JS正则表达式:子表达式,反向引用,search和replace方法,面试题,g,i【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律