JS正则表达式:子表达式,反向引用,search和replace方法,面试题,g,i【诗书画唱】
概括:
视频观看笔记
个人对子表达式的理解和运用
个人对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方法返回值是一个数组






个人对子表达式的理解和运用 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>
