转自:http://hi.baidu.com/%C5%ED%BD%F0%BD%F0%BB%D4%BB%D4/blog/item/8789010433f42613738da5e2.html
JS对String的子串判断的方法,比较容易混淆。
1、 charAt()
返回字符串中的第n个字符
字符串中第一个字符的下标值是0。如果参数n不在0和 string.length-1之间,该方法将返回一个空字符串。注意,JavaScript并没有一种有异于字符串类型的字符数据类型,所以返回的字符 是长度为1的字符串。
Method: stirng.charAt(n) n 获取的字符的位置,取值在0<=n<=string.length-1 2、 indexOf() 检索字符串 Method: string.indexOf(substring) string.indexOf(substring, start) substring 要在字符串string中检索的子串。 start 一个选用的整数参数,声明了在字符串string中开始检索的位置。它的合法聚会是0(字符串中的第一个字符的位置)到string.length-1(字符串的最后一个字符的位置)。如果省略了这个参数,将从字符串的第一个字符开始检索。 返回值 如果在string中的start位置之后存在substring,返回出现的第一个substring的位置。如果没有找到子串substring,返回-1。 描述 方法 String.indexOf()将从头到尾的检索字符串string,看它是否含有子串substring。开始检索的位置在字符串string的 start处或string的开头(没有指定start参数时)。如果找到了一个substring,那么String.indexOf()将返回 substring的第一个字符在string中的位置。string中的字符位置是从0开始的。如果在string中没有找到substring,那么String.indexOf()方法将返回-1。 3、 String.lastIndexOf()
从后向前检索一个字符串
Method: string.lastIndexOf(substring) string.lastIndexOf(substring, start) substring 要在字符串string中检索的子串。 start 一个选用的参数,声明了在字符串string中开始检索的位置。它的合法取值是0(字符串中的第一个字符的位置)到string.length-1(字符串中的最后一个字符的位置)。如果省略了这个参数,将从字符串的最后一个字符处开始检索。 返回值 如果在string中的start位置之前存在substring,那么返回的就是出现的最后一个substring的位置。如果没有找到子串substring,那么返回的就是-1。 描述 方法 String.lastIndexOf()将从尾到头的检索字符串string,看它是否含有子串substring。开始检索的位置在字符串 string的start处或string的结尾(没有指定start参数时)。如果找到了一个substring,那么 String.lastIndexOf()将返回substring的第一个字符在string中的位置。由于是从尾到头的检索一个字符串,所以找到的第 一个substring其实是出现在位置start之前的最后一个substring。4、String.substring() 返回字符串的一个子串 Method: string.substring(from, to) from 一个非负的整数,声明了要抽取的子串的第一个字符在string中的位置。 to 一个可选的非负的整数,比要抽取的子串的最后一个字符在string中的位置多1。如果省略了该参数,返回的子串直到字符串的结尾。 返回值 一个新字符串,其长度为to-from,存放的是字符串string的一个子串。这个新字符串含有的字符是从string中的from处到to-1处复制的。 描述 String.substring()将返回字符串string的子串,由from到to之间的字符构成,包括位于from的字符,不包括位于to的字符。如果参数from与to相等,那么该方法返回的就是一个空串(即长度为0的字符串)。如果from比to大,那么该方法在抽取子串之前会先交换这两个参 数。要记住,该子串包括from处的字符,不包括to处的字符。虽然这样看来有违直觉,但这种系统一个值得注意的重要特性是,返回的子串的长度总等于 to-from。 5、 String.substr() 抽取一个子串 Method: string.substr(start, length) start 要抽取的子串的起始下标。如果是一个负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1指定字符串中的最后一个字符,-2指倒数第二个字符,以此类推。 length 子串中的字符数。如果省略这个参数,那么返回从string的开始位置到结尾的子串。 返回值 一个string中的副本,包括从string的start处(包括start所指的字符)开始的length个字符。如果没有指定length,返回的字符串包含从start到string能结尾的字符。 描述 substr()将在string中抽取并返回一个子串。但是它并不修改string。注意,substr()指定的是子串的开始位置和长度,它是String.substring()和String.splice()的一种有用的替代方法,后两者指定的都是起始字符的位置。但要注意,ECMAScript没有标准化该方法,因此反对使用它。 例子 var s = "abcdefg";s.substr(2,2); // Returns "cd" s.substr(3); // Returns "defg" s.substr(-3,2); // Should return "ef"; returns "ab" in IE 4 Bugs 在IE4中,参数start的值无效(这在IE的后来版本中已修正了)。start值指定的不是从字符串尾部开始算起的字符位置,而是第0个字符的位置。 6、 String.split() 将字符串分割成字符串数组 Method: string.split(delimiter, limit) delimiter 返回值 一个字符串数组,是通过在delimiter指定的边界处将字符串string分割成子串创建的。返回的数组中的子串不包括delimiter自身,但下面列出的情况除外。 描述 方 法split()将创建并返回一个字符串数组,该数组中的元素是指定的字符串string的子串,最多具有limit个。这些子串是通过从头到尾检索字符 串中与delimiter匹配的文本,在匹配文本之前和之后分割string得到的。返回的子串中不包括定界符文本(文本部分结尾处提到的情况除外)。如 果定界符从字符串开关开始匹配,返回的数组的第一个元素是空串,即出现在定界符之前的文本。同样,如果定界符的结尾匹配,返回的数组的最后一个元素也是空 串(假如与limit没有冲突)。 例子 在使用结构复杂的字符串时,方法split()最有用。例如:"1:2:3:4:5".split(":"); // Returns ["1","2","3","4","5"] "|a|b|c|".split("|"); // Returns ["", "a", "b", "c", ""] split()方法的另一个常见用法是解析命令的与之相似的字符串,用空格将它们分割成单词: var words = sentence.split(' '); 正则表达式作为定界符,很容易把字符串分割成单词: var words = sentence.split(/\s+/); 要把字符串分割成字符数组,可以用空串作为定界符。如果只想把字符串前一部分分割成字符数组,需要使用limit参数: "hello".split(""); // Returns ["h","e","l","l","o"] "hello".split("", 3); // Returns ["h","e","l"] 如果想便返回的数组包括定界符或定界符的一个或多个部分,可以使用带子表达式的正则表达式。例如,下面的代码将在HTML标记处分割字符串,返回的数组中包括这些标记: var text = "hello <b>world</b>"; text.split(/(<[^>]*>)/); // Returns ["hello ","<b>","world","</b>",""] 7、 String.search()
检索与正则表达式相匹配的子串
Method: string.search(regexp) regexp 要在字符串string中检索的RegExp对象,该对象具有指定的模式。如果该参数不是RegExp对象,则首选将它传递给RegExp()构造函数,把它转换成RegExp对象。 返回值 string中第一个与regexp匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回-1。 描述 方法search()将字符串string中检索与regexp相匹配的子串,并且返回第一个匹配子串的第一个字符的位置。如果没有找到任何匹配的子串,则返回-1。 例子 var s = "JavaScript is fun";s.search(/script/i) // Returns 4 s.search(/a(.)a/) // Returns 1 8、 String.replace() 替换一个与正则表达式匹配的子串 Method: string.replace(regexp, replacement) regexp 声明了要替换的模式的RegExp对象。如果该参数是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换成RegExp对象。 replacement 一个字符串,声明的是替换文本或生成替换文本的函数。 返回值 一个新字符串,是用replacement替换了与regexp的第一次匹配或所有匹配之后等到的。 描述 字符串string的方法 repace()执行的是查找并替换操作。它将在string中查找与regexp相匹配的子串,然后用replacement替换这些子串。如果 regexp具有全局性质g,那么replace()将替换所有的匹配子串。否则,它只替换一个匹配子串。replacement可能是字符串或函数。 如果它是一个字符串,那么每个匹配都将由字符串替换。但replacement中的$字符具有特殊的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。 例子 要确保单词“JavaScript”中的大写字符是正确的,可用下列代码:text.replace(/javascript/i, "JavaScript"); 要将名字,“Doe,John”转换成“John Doe”的形式,可用下列代码: name.replace(/(\w+)\s*,\s*(\w+)/, "$2 $1"); 用花括号替换直引号,可用下列代码: text.replace(/"([^"]*)"/g, "''$1''"); 使字符串中所有单词的第一个字母都是大写的,可用下列代码: text.replace(/\b\w+\b/g, function(word) { return word.substring(0,1).toUpperCase( ) + word.substring(1); }); 9、 String.slice() 抽取一个子串 Method: string.slice(start, end) start 要抽取的片段的起始下标。如果是负数,那么该参数声明了从字符串的尾部开始算起的位置。也就是说,-1指字符串中的最后一个字符,-2是批倒数第二个字符,以此类推。 end 紧接着要抽取的片段的结尾下标 返回值 一个新字符串,包括字符串string从start开始(包括start)到end为止(不包括end)的所有字符。 描述 方法slice()将返回一个含有字符串string片段的字符串或返回它的一个子串。但是该方法不修改string。 s.slice(0,4) // Returns "abcd" s.slice(2,4) // Returns "cd" s.slice(4) // Returns "efg" s.slice(3,-1) // Returns "def" s.slice(3,-2) // Returns "de" s.slice(-3,-1) // Should return "ef"; returns "abcdef" in IE 4 Bugs 在Internet Explorer 4中,参数start的值无效(但在IE后来的版本中修正了)。start值指定的不是从字符串尾部开始算起的字符位置,而是指定第0个字符的位置。10、 String.valueOf() 返回字符串 Method: string.valueOf() 返回值 string的原始字符串值。 抛出 TypeError调用该方法的对象不是String时抛出该异常。 例子: var a=new String("abc");//一个对象字符型对象object var boo = new Boolean(false) 返回值 string中的第n个字符的Unicode编码。这个返回值是0~65535之间的16位整数。 描述 方法charCodeAt()与charAt()执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的则是有字符本身的子串。如果n是负数,或者大于等于字符串的长度,则charCodeAt()返回NaN。要了解从Unicode编码创建字符串的方法,请参阅String.formCharCode()。 12、 String.formCharCode() 返回值 含有指定编码的字符的新字符串。 描述 这个静态方法提供了一种创建字符串的方式,即字符串的每个字符都由单独的数字Unicode编码指定。注意,作为一种表态方法,fromCharCode()是构造函数String()的属性,而不是字符串或String对象的方法。String.charCodeAt()是与String.fromCharCode()配套使用的实例方法,它提供了获取字符串中单个字符的编码的方法。 例子 // Create the string "hello"var s = String.fromCharCode(104, 101, 108, 108, 111);
返回值 存放匹配结果的数组。该数组的内容依赖于regexp是否具有全局性质g。下面详细说明了这个返回值。 描述 方法match()将检索字符串string,找到一个或多个与regexp匹配的文本。这个方法的行为很大程序上依赖于regexp是否具有性质g。 例子 下面的全局匹配可以找到字符串中的所有数字:"1 plus 2 equals 3".match(/\d+/g/); // Return ["1", "2", "3"] 下面的非全局匹配使用了列加复杂的正则表达式,它具有几个用括号括起来的子表达式。与该表达式匹配的是一个URL,与它的子表达式匹配的是那个URL的协议部分、主机部分和路径部分: var url = /(\w+):\/\/([\w.]+)\/(\S*)/; var text = "Visit my home page at http://www.isp.com/~david"; var result = text.match(url); if (result != null) { var fullurl = result[0]; // Contains "http://www.isp.com/~david" var protocol = result[1]; // Contains "http" var host = result[2]; // Contains "www.isp.com" var path = result[3]; // Contains "~david" } 14、 String.concat() 连接字符串 Method: string.concat(value, ...) value, ... 要连接到string上的一个或多个值。 返回值 把每个参数都连接到字符串string上得到新字符串。 描述 方法concat()将把它的所有参数都转换成字符串(如果必要),然后按顺序连接到字符串string的尾部,返回连接后的字符串。注意,string自身并没有被修改。String.concat()与Array.concat()很相似。注意,使用“+”运算来进行字符串的连接运算通常更简便一些。 15、 String.toLocaleLowerCase(), toLocaleUpperCase(), toLowerCase(), toUpperCase() 把字符串转换成大小写(Lower小写, Upper大写) string的一个副本,按照本地方式转换成小/大写字母。只有几种语言(如土耳其语)具有地方特有的大小写映射,此时使用toLocaleLower/UpperCase会和toLower/UpperCase有区别。 通常情况返回值一样。 16、 String.localeCompare() 返回值 说明比较结果的数字。如果string小target,则localeCompare()返回小于0的数。如果string大于target,该方法返回大于0的数。如果两小字符串相等,或根据本地排序规则没有区别,该方法返回0。 描述 把 < 和 > 运算符应用到字符串时,它们只用字符的Unicode编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,西班牙语中,其中字母“ch”通常作为出现在字母“c”和“d”之间的字符来排序。localeCompare()方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAScript标准没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。 例子 可以用下列代码,按照地方特定的排序规则对一个字符串数组排序。var strings; // The array of strings to sort; initialized elsewhere strings.sort(function(a,b) { return a.localeCompare(b) }); |