JavaScript——字符串及正则表达式

字符串操作规范

JS定义字符串方法

字符串直接量:使用双引号或者单引号包含任意长度的文本,

任何被引号包含的文本都是字符串数据。

注意:单双引号不能交错,含有多重语义的字符要加反斜杠\转义表示。

构造:使用string()类型函数构造字符串,该函数可以接受一个参数,并把它作为值来初始化字符串。

使用字符编码:使用fromChaCode()方法可以把Unicode字符编码转换为字符串。

字符串的值和长度

用valueOf()方法可以返回字符串的值。

为string扩展原型方法byteLength(),该方法枚举每个字符,,并根据字符变编码判断其是单音节还是双音节,然后统计字符串的长度。

字符串连接

使用oncat()方法,可以把多个参数加到字符串尾部,并且参数类型和个数不限。concat方法不会修改原字符串的值。

也可以借助数组的join()方法来连接字符串(特定环境)。

字符串查找

charAt()和charCodeAt()方法可以根据参数(非负整数下标)返回指定位置的字符或字符编码。

注意:若参数不在0~length-1之间,charAt方法返回空字符串;

charCodeAt返回NaN。

indexOf(从左往右)和lastIndexOf(从右往左)方法可以根据参数字符串返回指定子字符串下标位置。

search方法功能同indexOf,但只有一个参数,不能反向检索,也不支持全局模式。

match方法可以找出所有匹配的字符串,以数组形式返回。如果不是全局匹配,它只能执行一次匹配。若未找到,则返回null而不是空数组。

例:使用match()方法匹配URL字符串中所有点号字符。

var s="http://www.mysite.cn/index.html";

var a=s.match(/(\.).*(\.).*(\.)/);//执行一次匹配搜索

console.log(a.length);//返回4,包含4个元素的数组
console.log(a[0]);//返回字符串".mysite.cn/index."
console.log(a[1]);
console.log(a[2]);
console.log(a[3]);

字符串截取

substr()方法可以根据指定长度截取字符串。它包含两个参数,第一个代表起始下标,第二个代表截止长度。slice()方法同。

替换

replace()方法可以替换,包含两个参数,第一个表示执行匹配的正则表达式,第二个是准备替换平匹配的子字符串。它实际上执行的是同时查找和替换两个操作。

示例:从服务器端读取学生成绩,使用for语句把所有字符串转换为字符串,再来练习自动提取字符串中的分数,并汇总、算出平均分,最后用replace()方法提取每个分值并比较。

var score={//从服务器端接受的JSON数据
"张三":56;
"李四":76;
"王五":87;
"赵六":98;
},_score="";
for(var id in score){//将JSON转为字符串
_score+=id+score[id];
}
var a =_score.match(/\d+/g),sum=0;//匹配
for(var i=0;i<a.length;i++){
sum+=parseFloat(a[i]);//累加
};
var avg=sum/a.length;
function(f){
var n=parseFloat(arguments[1]);
return ":"+n+"分"+"("+((n>avg)?
("低于平均分"+(avg-n)))+"分)<br>;
}
var s1=_score.replace(/(\d+)/g,f);//设计替换的内容
document.write(s1);

字符串大小转换

toLowerCase

toUpperCase

字符串比较

localeCompare()方法包含一个参数,指定要比较的目标字符串。若当前字符串小于参数字符串,则返回小于0的数;大于则返回大于0的数;相等返回0。

字符串与数组转换

split()方法根据指定分隔符把字符串劈开为数组。

若参数为空字符串,split方法可以按单个字符分切,然后返回与字符串等长的数组。

若参数为正则表达式,则可以以匹配文本作为分隔符进行切分。

正则表达式

(规则表达式),是操作字符串的一种逻辑公式,用事先规定好的一些特定字符及其组合组成一个规则字符串,用来表达对字符串的一种匹配模式。

JS通过内置RegExp类型支持正则表达式。

定义正则表达式的方法有两种:构造,直接量。

使用RegExp构造函数可以定义正则表达式对象:

newRegExp(pattern,attributes)

pattern指定匹配模式或者正则表达式对象;attributes是一个可选修饰性标识,包括:

"g":全局匹配,在指定字符串范围内执行所有匹配

"i":定义不区分大小写的匹配

"m":多行匹配

正则表达式直接量使用双斜杠进行定义,双斜杠之间包含的字符为正则表达式的模式,字符模式不能用引号,标志字符放在最后一个斜杠后面。

//syntax:

/pattern/attributes

执行匹配

exec()方法

//syntax:

regexp.exec(string)

执行检测

test()方法,可以检测一个字符串是否包含另一个字符串。

编译正则表达式

使用compile()方法可以重新编译正则表达式。这样在脚本执行过程中可以动态修改正则表达式的匹配模式。

//syntax:

regexp.compile(regexp,modifier)

正则表达式的对象属性

属性说明读写属性
global返回boolean值,检测RegExp对象是否具有标志g只读
ignoreCase返回boolean值,检测RegExp对象是否具有标志i只读
multiline返回boolean值,检测RegExp对象是否具有标志m只读
lastIndex整数,返回或设置执行下一次匹配的下标位置可读可写
source返回正则表达式的字符模式源码只读

RegExp静态属性

长名短名说明
input$_返回当前所作用的字符串,初始值为空字符串”"
index当前模式匹配的开始位置,从0开始计数。初始值为-1,每次成功匹配时,index
属性值都会随之改变
lastIndex

当前模式匹配的最后一个字符的下一个字符位置,从0开始计数,常被作为继续匹配的

起始位置。初始值为-1,表示从起始位置开始拽索,每次成功匹配时,lastIndex属性

值都会随之改变

lastMatch$&最后模式匹配的字符串,初始值为空字符串""。在每次成功匹配时,lastMatch属性
值都会随之改变
lastParen$+

最后子模式匹配的字符串,如果匹配模式中包含有子模式(包含小括号的子表达式,

在最后模式匹配中最后一个子模式所匹配到的子字符串。初始值为空字符串""。每次成

功匹配时,lastParen属性值都会随之改变

leftContext$`在当前所作用的字符串中,最后模式匹配的字符串左边的所有内容。初始值为空字
符串""。每次成功匹配时,其属性值都会随之改变
rightContext$"在当前所作用的字符串中,最后模式匹配的字符串右边的所有内容。初始值为空字
符串""。每次成功匹配时,其属性值都会随之改变
$1~$9$1~$9

只读属性,如果匹配模式中有小括号包含的子模式,S1~S9属性值分别是第1~第9个

子模式所匹配到的内容。如果有超过9个以上的子模式,S1~S9属性值分别对应最后的

9个子模式匹配结果。在一个匹配模式中,可以指定任意多个小括号包含的子模式,但

RegExp 静态属性只能存储最后9个子模式匹配的结果。在RegExp实例对象的一些方

法所返回的结果数组中,可以获得所有圆括号内的子匹配结果

实例:表单验证

<form method="post" action="" name="myform" class="form" >

<label for="user_name">真实姓名<br/>

<input id-"user name" type="text" name="user_name" required pattern="^

([\u4e00-\u9fa5]+|([a-z]+\s?)+)$" />

</label>

<label for="user_item">比赛项目<br/>

<input list="ball" id="user_item" type-"text" name-"user_item" required/>

</label>

<datalist id="ball"><option value="篮球"/><option value="羽毛球"/><option value="桌球"/></datalist>

<label for="user_email">电子邮箱<br/>

<input id="user_email" type-"email" name-"user_email" pattern="^[0-9a-z]

[a-z0-9\._-](1,}@[a-z0-9-](1,}[a-z0-9]\.[a-z\.](1,}[a-z]S" required />

</label>

<label for="user_phone">手机号码<br/>

<input id-"user_phone" type="tel" name-"user _phone" pattern="^1\d(10)$/.(0\d(2,3)-?/\(0\d(2,3)\))?(1-9]\d(4,7)(-\d(1,8))?$" required/>

</label>

<label for="user_id">身份证号

<input id-"user id" type-"text" name-"user _id" required pattern-"^(1-9]|d(5)[1-9]\d(3)((0\d) |(1[0-2]))(([01112]\d)13[0-1])\d{3}([0-9]1x)$" />

</label>

<label for="user_born">出生年月

<input id-"user_born" type-"month" name-"user _born" required /></label>

<label for="user_rank">名次期望<span>第<em</label>

id="ranknum">5</em>名</span>

<input id-"user_rank" type="range" name-"user_rank" value="5" min="1" max="10"step="1" required /><br/>

<button type="submit" name="submit" value="提交表单">提交表单</button></form>

第2步,设计表单控件的验证模式。“真实姓名”选项为普通文本框,要求必须输入required,验
证模式为中文字符。

pattern="^([\u4e00-\u9fa5]+|([a-z]+\s?)+)$"

“比赛项目”选项设计一个数据列表,使用datalist 元素设计,使用 list="ball"绑定到文本框上。

第3步,“电子邮箱”选项设计 type=“email"类型,同时使用如下匹配模式兼容老版本浏览器。

pattern="²[0-9a-z]la-z0-9\._-1(1,}@[a-z0-9-1(1,)(a-20-9]\.(a-z\.1(1,)la-z19"

第4步,“手机号码”选项设计 type-"tel"类型,同时使用如下匹配模式兼容老版本浏览器。

pattern=“^1Nd(10)512(0\d(2,3)=71N(0\d(2,31\))2[1-9]Nd(4,7)(-\d(1,8))26"

第5步,“身份证号”选项使用普通文本框设计,要求必须输入。定义匹配模式如下。
 

pattern="^[1-9]\d(5)[1-9]\d(3)((0\d) |(1[0-2]))(([0|112]\d)13[0-1])\d(3)([0-9]|X)S"

第6步,“出生年月”选项设计type="month"类型,这样就不需要进行验证,用户必须在日期选择器面板中进行选择,无法作弊。
第7步,“名次期望”选项设计 type-"range"类型,限制用户只能在1~10进行选择。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值