1. String: 由多个字符组成的字符只读数组

vs 数组: 相同: 1. 下标, 2. .length, 3. 遍历, 4. .slice

不同: 类型不同!  API不通用

API: 所有字符串API,都无权修改原字符串,只能返回新字符串

大小写转换: 将字符串中的字母统一转为大写/小写

何时: 不区分大小写时

如何: str.toUpperCase() 转大写

str.toLowerCase() 转小写

说明: sql语句默认不区分大小写

如果希望密码区分大小写: binary upwd=$upwd

获取指定位置的字符:

str[i]  str.charAt(i)

获取指定位置字符的unicode号

var unicode=str.charCodeAt(i)

将unicode号变回字:

var char=String.fromCharCode(unicode)

选取子字符串:

str.slice(starti,endi+1) 含头不含尾

.slice(starti,-n) 到倒数第n个之前

=> .slice(starti, str.length-n)

.slice(starti) 选取到结尾

.slice()  选取全部

.slice(starti,starti+n) 选择n个

str.substring(starti, endi+1) 用法同slice

问题: 不支持负数参数

str.substr(starti,n) 选择n个

查找关键词: 4种:

1. 查找一种固定的关键词出现的位置:

var i=str.indexOf("关键词",fromi);

在str中,从fromi位置开始,找下一个"关键词"出现的位置

返回值: 第一个关键词的位置

如果找不到,返回-1

var i=str.lastIndexOf("关键词");

查找str中"关键词"最后一次出现的位置

问题: 关键词可能发生变化

解决: 用正则查找关键词:

2. 判断是否包含关键词:

var i=str.search(/正则表达式/)

查找str中第一个符合正则表达式规则的关键词的位置

返回值: 关键词的位置

如果没找到,返回-1

问题: 所有正则,默认区分大小写的

解决: 在第二个/后加i,  ignore

问题: 无法获得关键词的内容

3. 获得关键词的内容:

1. 只获得第一个关键词的内容:

var arr=str.match(/正则表达式/i);

查找str中第一个符合正则表达式要求的关键词的位置和内容

返回值: [ 0: 关键词,  index: 位置]

如果没找到返回null

2. 获得所有关键词的内容:

var arr=str.match(/正则表达式/ig);

其中g: global

返回所有关键词组成的数组

问题: 只能获得内容,无法获得每个关键词的位置:

4. 即查找每个关键词的内容,又查找每个关键词的位置:

替换: 2种:

1. 简单替换:将所有敏感词,替换为统一的值

str=str.replace(/正则表达式/ig, "替换值");

2. 高级替换:根据每个敏感词的不同,动态选择不同的替换值

str=str.replace(/正则表达式/ig, function(kw){

//kw: 可自动获得本次找到的一个关键词

return 根据kw的不同,动态选择不同返回值

});

原理: 回调函数function()会自动在每个找到的关键词上调用一次。调用时,参数kw会自动接住当前关键词。return返回的新值,会被替换到关键词所在位置。

衍生操作: 删除: 替换为空字符串

str=str.replace(/正则/ig,"")

切割:

2. 正则表达式:

什么是: 规定一个字符串中字符出现规律的规则

何时: 2种:

1. 用一套规则,模糊匹配多种敏感词

2. 用规则验证字符串是否符合格式要求

如何:

1. 最简单的规则: 就是关键词本身

2. 字符集:

什么是: 一位字符上所有备选字符的列表

何时: 如果一位字符上,有多种备选字时

如何: [备选字符列表]

强调: 一个字符集,只能匹配一位字符

简写: 如果字符集中部分字符是连续的,可用-省略中间字符:  比如:

1位数字: [0-9]

1位小写字母: [a-z]

1位大写字母: [A-Z]

1位字母: [A-Za-z]

1位字母或数字: [0-9A-Za-z]

1位汉字: [\u4e00-\u9fa5]

除了: [^47]

3. 预定义字符集:

\d 一位数字: [0-9]

\w 一位字母,数字或下划线: [0-9A-Za-z_]

\s  一位空字符: 空格, Tab, ...

.   通配符

问题: 无法灵活规定字符集出现的次数

4. 量词:

什么是: 规定一位字符出现次数的规则

何时: 只要灵活定义一位字符出现的次数时

如何: 量词紧跟在一个字符集之后,默认修饰相邻的前一个字符集的个数

2大类:

1. 有明确数量边界的

{n,m} 至少n个,最多m个

{n,}  至少n个,多了不限

{n}   必须n个

2. 没有明确数量边界

* 可有可无,多了不限

? 可有可无,最多一个

+ 至少一个,多了不限

5. 选择和分组:

1. 选择: 或   |

什么是: 在多组逻辑之间,任选其一匹配即可

何时: 只要在在多组逻辑之间,任选其一匹配

2. 分组: ( )

什么是: 将多个逻辑包裹为一组

问题: 默认,一个量词只能修饰相邻的一个字符集

何时: 如果希望一个量词可以同时修饰多个字符集时

身份证号:

15位数字  2位数字 一位数字或X

后三位整体可有可无,最多1次

\d{15}(\d{2}[0-9X])?

手机号:

+86 或 0086  可有可无,最多1次

空字符       可有可无,多了不限

1

3~8

9位数字

(\+86|0086)?\s*1[3-8]\d{9}

?/+

6. 指定匹配位置:

^ 字符串开头

$ 字符串结尾

何时: 只要匹配开头的或结尾的内容时

比如: ^\s+ 开头的空字符

\s+$ 结尾的空字符

^\s+|\s+$ 开头或结尾的空字符

\b单词边界: 空格,标点,开头,结尾,。。。

比如: 每个单词首字符: \b[a-z]

一个单词no  \bno\b

JS高级-String-正则表达式:的更多相关文章

  1. JS高级---识别正则表达式是否匹配

    识别正则表达式是否匹配 console.log(/[a-zA-Z]+/.test("hello")); console.log(/./.test("除了回车换行以为的任意 ...

  2. JS高级---创建正则表达式对象

    创建正则表达式对象 两种: 1.通过构造函数创建对象 2.字面量的方式创建对象   正则表达式的作用: 匹配字符串的   //对象创建完毕--- var reg = new RegExp(/\d{5} ...

  3. 读JS高级——第五章-引用类型 _记录

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证

    ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...

  5. js复习---string

    对js的string的方法复习: 1.charCodeAt()  返回一个整数,代表指定位置字符串的unicode编码. strObj.charCodeAt(index) index 是处理字符的从零 ...

  6. JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象

    JavaScript -- 知识点回顾篇(六):js中的正则表达式 -- RegExp 对象 1. js正则表达式匹配字符之含义      查找以八进制数 规定的字符.     查找以十六进制数 规定 ...

  7. JS删除String里某个字符的方法

    关于JS删除String里的字符的方法,一般使用replace()方法.但是这个方法只会删除一次,如果需要将string里的所以字符都删除就要用到正则. 1 2 3 4 var str = " ...

  8. Ext.js高级组件

    第二章:Ext.js高级组件 grid组件 普通方式 表格面板类Ext.grid.Panel xtype(别名):gridpanel.grid title标题.renderTo渲染至.width宽.h ...

  9. JS高级前端开发群加群说明及如何晋级

    JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明:   一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这 ...

  10. js实现String.Fomat

    引言 拼接字符串用习惯了C#的String.Format.今天看别人的代码在js中也封装了一个js的String.Format,用来拼接字符串和DOM. js实现和调用String.Format St ...

随机推荐

  1. zabbix 3.2.6+centos 7 +nginx 1.12+ mysql 5.6+ Grafana +php 5.6

    先只记录关键点 1.nginx.MYSQL 用官方的YUM库安装 2.CENTOS升级到最新 3.ZABBIX 官方RPM安装,然后下载源码库,源码中的PHP复制至NGINX的配置目录 4.NGINX ...

  2. 链表中倒数第k个结点(python)

    题目描述 输入一个链表,输出该链表中倒数第k个结点 # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.v ...

  3. undefined reference to symbol' pthread_create@@GLIBC_2.2.5'

    我在ubuntu16.04上迁移工程,遇到了这个错误. pthread库不是Linux系统默认的库,链接时需要添加-pthread参数. 这里注意是链接那一步添加-pthread,而不是编译选项.

  4. unity的inputField文本框赋值问题

    GameObject t = GameObject.Find("InputFieldT"); Text tt = t.transform.Find("Text" ...

  5. TZOJ 2722 Matrix(树状数组区间取反单点查询)

    描述 Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row ...

  6. HDU 1166 敌兵布阵(线段树单点更新,区间查询)

    描述 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  7. 第五章 Inheritance继承

    [继承] Java不支持多重继承 - 每个子类只有一个超类. 不是将成员变量声明为静态,更好的做法是将University实例化为对象,然后使用该对象访问其成员,如下所示: [抽象类] 可以包含或者不 ...

  8. MB_DOCUMENT_BADI调试(Update Debug)

    Update Module函数,主要用语对话或报表中实现同步和异步更新数据库操作,需要单独调用函数实现更新数据库表,但又要求对程序的运行不产生影响(更新成功与否不影响主程序的正常执行) 几个操作,要么 ...

  9. day 23 网络编程

    C/S架构 Client与Server B/S架构 Browser与Server windows上查看端口占用情况 netstat -a OSI七层模型: 其他略...

  10. awk参数解析

    # awk --help Usage: awk [POSIX or GNU style options] -f progfile [--] file ... Usage: awk [POSIX or ...