- string.charAt(pos)
charAt方法返回在string中pos位置的字符。如果pos小于0或者大于等于字符串的长度string.length,它会返回空字符串。javascript没有字符类型(character type)。这个方法返回的结果是一个字符串:
var name = 'Curly';
var initial = name.charAt(0); // initial='C';
charAt可以像这样实现:
String.method('chatAt', function(pos){
return this.slice(pos, pos + 1);
});
- string.charCodeAt(pos)
charCodeAt方法同charAt一样,只不过它返回的不是一个字符串,而是以整数形式表示的在string中的pos位置处的字符的字符码位。如果pos小于0或大于等于字符串的长度string.length,它返回NaN。
var name = 'Curly';
var initial = name.charCodeAt(0); //initial = 67;
- string.concat(string...)
concat方法把其他的字符串连接在一起来构造一个新的字符串。它很少被使用,因为用+运算符更为方便:
var s = 'C'.concat('a', 't'); //s = 'Cat';
- string.indexOf(searchString, position)
indexOf方法在string内查找一个字符串searchString。如果它被找到,返回第1个匹配字符的位置,否则返回-1。可选参数position可设置从string的某个指定的位置开始查找:
var text = 'Mississippi';
var p = text.indexOf('ss'); //p = 2;
p = text.indexOf('ss', 3); //p = 5;
p = text.indexOf('ss', 6); //p = -1;
- string.lastIndexOf(searchString, position)
lastIndexOf方法和indexOf方法类似,只不过它是从该字符串的末尾开始查找而不是从开头:
var text = 'Mississippi';
var p = text.lastIndexOf('ss'); //p = 5;
p = text.lastIndexOf('ss', 3); //p = 2;
p = text.lastIndexOf('ss', 6); //p = 5;
- string.localCompare(that)
localCompare方法比较两个字符串。如何比较字符串的规则没有详细说明。如果string比字符串that小,那么结果为负数。如果它们是相等的,那么结果为0。这类似于array.sort比较函数的约定:
var m = ['AAA', 'A', 'aa', 'a', 'Aa', 'aaa'];
m.sort(function (a, b) {
return a.localeCompare(b);
});
//m = ['a', 'A', 'aa', 'Aa', 'aaa', 'AAA'];(某些local设置下)
- string.match(regexp)
match方法让字符串和一个正则表达式进行匹配。它依据g标识来决定如何进行匹配。如果没有g标识,那么调用string.match(regexp)的结果与调用regexp.exec(string)的结果相同。然而,如果regexp带有g标识,那么它生成一个包含所有匹配(除捕获分组之外)的数组:
var text = '<html><body bgcolor=linen><p>' + 'This is <b>bold<\/b>!<\/p><\/body><\/html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a, i;
a = text.match(tags);
for (i = 0; i < a.length; i+=1) {
console.log(a[i]);
}
//结果:
//<html>
//<body bgcolor=linen>
//<p>
//This is
//<b>
//bold
//</b>
//!
//</p>
//</body>
//</html>
- string.replace(searchValue, replaceValue)
replace方法对string进行查找的替换操作,并返回一个新的字符串。参数searchValue可以是一个字符串或一个正则表达式对象。如果它是一个字符串,那么searchValue只会在第1次出现的地方被替换,所以下面的代码结果是"mother-in_law":
var result = "mother_in_law".replace('_', '-');
这或许令你失望。
如果searchValue是一个正则表达式并且有g标识,它会替换所有的匹配。如果没有带g标识,它会仅替换第1个匹配。
replaceValue可以是一个字符串或一个函数。如果replaceValue是一个字符串,字符$拥有特别的含义:
//捕获括号中的3个数字
var oldareacode = /\((\d{3})\)/g;
var p = '(555)666-1212'.replace(oldareacode, '$1-');
//p = '555-666-1212';
美元符号序列 | 替换对象 |
---|---|
$$ | $ |
$& | 整个匹配的文本 |
$number | 分组捕获的文本 |
$` | 匹配之前的文本 |
$' | 匹配之后的文本 |
String.method('entityify', function () {
var character = {
'<': '<',
'>': '>',
'&': '&',
'"': '"'
};
//返回String.entityify方法,它返回调用替换方法的结果。
//它的replaceValue函数返回在一个对象中查找一个字符的结果。
//这种对象的用法通常优于switch语句。
return function () {
return this.replace(/[<>&"]/g, function (c) {
return character[c];
});
};
}());
console.log("<&>".entityify()); //<&>
- string.search(regexp)
search方法和indexOf方法类似,只是它接受一个正则表达式对象作为参数而不是一个字符串。如果找到匹配,它返回第1个匹配的首字符位置,如果没有找到匹配,则返回-1。此方法会忽略g标识,且没有position参数:
var text = 'and in it he says "Any damn fool could';
var pos = text.search(/["']/);
//pos = 18;
- string.slice(start ,end)
slice方法复制string的一部分来构造一个新的字符串。如果start参数是负数,它将与string.length相加。end参数是可选的,且默认值是string.length。如果end参数是负数,那么它将与string.length相加。end参数等于你要取的最后一个字符的位置值加上1 。要想得到从位置p开始的n个字符,就用string.slice(p ,p + n)。
var text = 'and in it he says "Any damn fool could';
var a = text.slice(18);
//a = '"Any damn fool could';
var b = text.slice(0, 3);
//b = 'and';
var c = text.slice(-5);
//c = 'could';
var d = text.slice(19, 32);
//d = 'Any damn fool';
- string.split(separator, limit)
split方法把这个string分割成片段来创建一个字符串数组。可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式。
如果separator是一个空字符,它会返回一个单字符的数组:
var digits = '0123456789';
var a = digits.split('', 5);
//a = ['0', '1', '2', '3', '4'];
否则,此方法会在string中查找所有separator出现的地方。分隔符两边的每个单元文本都会被复制到该数组中。此方法会忽略标识:
var ip = '192.168.1.0';
var b = ip.split('.');
//b = ['192', '168', '1', '0'];
var c = 'a|b|c'.split('|');
//c = ['', 'a', 'b', 'c', ''];
var text = 'last, first, middle';
var d = text.split(/\s*,\s*/);
//d = ['last', 'first', 'middle'];
有一些特例须特别注意。来自分组捕获的文本会被包含在被分割后的数组中:
var text = 'last, first, middle';
var e = text.split(/\s*(,)\s*/);
//e = ['last', ',', 'first', ',', 'middle'];
当separator是一个正则表达式时,有一些javascript的实现在输出数组中会排除掉空字符中:(
只有IE8及之前版本的IE浏览器会在输出的数组结果中排除空字符串,IE9已经修复了这个问题)
ar f = '|a|b|c|'.split('|');
//在一些系统中,f = ['', 'a', 'b', 'c', ''];
//在另外一些系统中,f = ['a', 'b', 'c'];
- string.substring(start, end)
substring的用法和slice方法一样,只不过它不能处理负数参数。没有任何理由去使用substring方法。请用slice替代它。
- string.toLocalLowerCase()
toLocalLowerCase方法返回一个新的字符串,它使用本地化的规则把这个string中的所有字母转换为小写格式。这个方法主要用在土耳其语上,因为土耳其语中‘I’转换为‘I’,而不是‘i’。
- string.toLocalUpperCase()
toLocalUpperCase方法返回一个新的字符串,它使用本地化的规则把这个string中的所有字母转换为大写格式。这个方法主要用在土耳其语上,因为土耳其语中‘i’转换为‘İ’,而不是‘I’。
- string.toLowerCase()
toLowerCase方法返回一个新的字符串,这个string中的所有字母都被转换为小写格式。
- string.toUpperCase()
toUpperCase方法返回一个新的字符串,这个string中的所有字母都被转换为大写格式。
- string.fromCharCode(char...)
String.fromCharCode函数根据一串数字编码返回一个字符串。
vvar a= String.fromCharCode(67, 97, 116);
//a = 'Cat';
※摘抄自《JavaScript语言精粹(修订版)》