var stringValue="hello world"; console.log(stringValue.toLocaleUpperCase());//HELLO WORLD console.log(stringValue.toUpperCase());//HELLO WORLD console.log(stringValue.toLocaleLowerCase());//hello world console.log(stringValue.toLowerCase());//hello world
一般来说,在不知道自己的代码将在哪种语言环境中运行的情况下,还是使用针对地区的方法更稳妥一些.
6.字符串的模式匹配方法
String类型定义了几个用于在字符串中匹配模式的方法.第一个方法就是match(),在字符串上调用这个方法,本质上与调用RegExp的exec()方法相同.match()方法只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象.
var text="cat,bat,sat,fat"; var pattern=https://www.jb51.net/.at/; //与pattern.exec(text)相同 var matches=text.match(pattern); console.log(matches.index);//0 console.log(matches[0]);//cat console.log(pattern.lastIndex);//0
本例中的match()方法返回了一个数组;如果是调用RegExp对象的exec()方法并传递本例中的字符串作为参数,那么也会得到与此相同的数组:数组的第一项是与整个模式匹配的字符串,之后的每一项(如果有)保存着与正则表达式中的捕获组匹配的字符串.
另一个用于查找模式的方法是search().这个方法的唯一参数与match()方法的参数相同:由字符串或RegExp对象指定的一个正则表达式.search()方法返回字符串中第一个匹配项的索引;如果没有找到匹配项,则返回-1.而且,search()方法始终是从字符串开头向后查找模式.
var text="cat,bat,sat,fat"; var pos=text.search(/at/); console.log(pos);//1
为了简化替换子字符串的操作,ECMAScript提供了replace()方法.这个方法接受两个参数:第一个参数可以是一个RegExp对象或者一个字符串(这个字符串不会被转换成正则表达式),第二个参数可以是一个字符串或者一个函数.如果第一个参数是字符串,那么只会替换第一个子字符串.要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局(g)标志.
var text="cat,bat,sat,fat"; var result=text.replace("at","ond"); console.log(result);//cond,bat,sat,fat result=text.replace(/at/g,"ond");//cond,bond,sond,fond
后面是通过将第一个参数修改为带有全局标志的正则表达式,就将全部"at"都替换成了"ond".
如果第二个参数是字符串,那么还可以使用一些特殊的字符序列,将正则表达式操作得到的值插入到结果字符串中.
下面列出了ECMAScript提供的这些特殊的字符序列.
字符序列
替换文本
$$
$
$&
匹配整个模式的子字符串.与RegExp.lastMatch的值相同
$'
匹配的子字符串之前的子字符串.与RegExp.leftContext的值相同
$`
匹配的子字符串之后的子字符串.与RegExp.rightContext的值相同
$n
匹配第n个捕获组的子字符串,其中n等于0~9.例如,$1是匹配第一个捕获组的子字符串,$2是匹配第二个捕获组的子字符串.以此类推.如果正则表达式中没有定义捕获组,则使用空字符串
$nn
匹配第nn个捕获组的子字符串,其中nn等于01~99.例如,$01是匹配第一个捕获组的子字符串,$02是匹配第二个捕获组的子字符串,以此类推.如果正则表达式中没有定义捕获组,则使用空字符串
通过这些特殊的字符序列,可以使用最近一次匹配结果中的内容.
var text="cat,bat,sat,fat"; result=text.replace(/(.at)/g,"word ($1)"); console.log(result);//word(cat),word(bat),word(sat),word(fat)
在此,每个以".at”结尾的单词都被替换了,替换结果是"word"后跟一对圆括号,而圆括号中是被字符序列$1所替换的单词.
replace()方法的第二个参数也可以是一个函数.在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递3个函数:模式的匹配项,模式匹配项在字符串的位置和原始字符串.在正则表达式中定义了多个捕获组的情况下,传递给函数的参数 依次是模式的匹配项,第一个捕获组的匹配项,第二个捕获组的匹配项....,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串.这个函数应该返回一个字符串,表示应该被替换的匹配项使用函数作为replace()方法的第二个参数可以实现更加精细的替换操作.
function htmlEscape(text){ return text.replace(/[<>"&]/g,function(match,pos,originalText){ switch(match){ case "<": return "<"; case ">": return ">"; case "&": return "&"; case "\"": return """; } }); } console.log(htmlEscape("<p class=\"greeting\">Hello world!</p>*"));//<p class="greeting">Hello world!</p>*