溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

String類型的屬性和方法

發(fā)布時(shí)間:2020-08-02 14:55:19 來源:網(wǎng)絡(luò) 閱讀:504 作者:jjjssswww 欄目:網(wǎng)絡(luò)安全

屬性

  字符串String類型的每個(gè)實(shí)例都有一個(gè)length屬性,表示字符串中的字符個(gè)數(shù)。由于字符串是不可變的,所以字符串的長度也不可變

  字符串的length屬性不會(huì)在for/in循環(huán)中枚舉,也不能通過delete操作符刪除

  [注意]對(duì)于字符串s來說,最后一個(gè)字符的索引是s.length - 1

var str = "test";
console.log(str.length);//4str.length = 6;
console.log(str,str.length);//"test",4

 

實(shí)例方法

  字符串String對(duì)象有多達(dá)20多個(gè)實(shí)例方法,包括toString()、toLocaleString()、valueOf()從Object對(duì)象繼承的3種對(duì)象通用方法,chartAt()、中括號(hào)[]、charCodeAt()和fromCharCode()4種訪問字符方法,concat()和加號(hào)+這2種字符串拼接方法,slice()、substr()和substring()3種創(chuàng)建子字符串方法,toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase()這4種大小寫轉(zhuǎn)換方法,indexOf()和lastIndexOf()這2種查找字符串位置的方法,match()、search()、replace()、split()這4種正則匹配方法以及去除首尾空格的trim()方法和字符串比較的localeCompare()方法

 

對(duì)象通用方法

  String類型是與字符串對(duì)應(yīng)的包裝類型,繼承了Object對(duì)象的通用方法toString()、toLocaleString()、valueOf()這三個(gè)方法

【toString()】

  toString()方法返回string的原始字符串值

【toLocaleString()】

  toLocaleString()方法返回string的原始字符串值

【valueOf()】

  valueOf()方法返回string的原始字符串值

console.log("test".valueOf());//"test"console.log("test".toString());//"test"console.log("test".toLocaleString());//"test"

 

訪問字符方法

  字符串的訪問字符方法總共有chartAt()、中括號(hào)[]、charCodeAt()和fromCharCode()四種

【chartAt()】

  charAt()方法接收一個(gè)基于0的字符位置的參數(shù),返回指定位置的字符。當(dāng)參數(shù)為空或NaN時(shí),默認(rèn)參數(shù)為0;當(dāng)參數(shù)超出范圍時(shí),則返回一個(gè)空字符串 

String類型的屬性和方法

var str = "hello";
console.log(str.charAt(1));//econsole.log(str.charAt(-1));//''console.log(str.charAt(10));//''console.log(str.charAt());//h 
console.log(str.charAt(NaN));//h

String類型的屬性和方法

  charAt()方法涉及到Number()函數(shù)的隱式類型轉(zhuǎn)換,如果轉(zhuǎn)換為數(shù)值,則按照上述規(guī)則輸出字符串;如果轉(zhuǎn)換為NaN,則輸出第0個(gè)字符

String類型的屬性和方法

var str = "hello";
console.log(str.charAt(true));//'e'console.log(str.charAt(false));//'h'console.log(str.charAt('abc'));//'h'console.log(str.charAt({}));//'h'console.log(str.charAt([2]));//'l'

String類型的屬性和方法

  [注意]x.charAt(pos)與x.substring(pos, pos+1)、x.substr(pos,1)、x.slice(pos,pos+1)的結(jié)果相等

var str = "hello";
console.log(str.charAt(1));//'e'console.log(str.substring(1,2));//'e'console.log(str.slice(1,2));//'e'console.log(str.substr(1,1));//'e'

【中括號(hào)】

  ECMAScript5定義了另一個(gè)訪問字符的方法,使用方括號(hào)加數(shù)字索引來訪問字符串中的特定字符。如果參數(shù)超出范圍或是NaN時(shí),則輸出undefined;沒有參數(shù)時(shí),會(huì)報(bào)錯(cuò);該方法沒有Number()轉(zhuǎn)型函數(shù)的隱式類型轉(zhuǎn)換,但參數(shù)為單數(shù)值數(shù)組時(shí)可轉(zhuǎn)換為數(shù)值

  [注意]IE7-瀏覽器不支持

String類型的屬性和方法

var str = "hello";
console.log(str[0]);//hconsole.log(str`1`);//econsole.log(str[false]);//undefinedconsole.log(str[-1]);//undefinedconsole.log(str[NaN]);//undefinedconsole.log(str[]);//報(bào)錯(cuò)

String類型的屬性和方法

【charCodeAt()】

  charCodeAt()方法類似于charAt()方法,接收一個(gè)基于0的字符位置的參數(shù),但返回的是指定位置的字符16位Unicode編碼。返回值是一個(gè)16位的整數(shù),在0-65535之間,即0x0000-0xffff之間

  參數(shù)為空或NaN時(shí),默認(rèn)參數(shù)為0;當(dāng)參數(shù)超出范圍時(shí),則返回NaN

String類型的屬性和方法

var str = "hello";
console.log(str.charCodeAt());//104console.log(str.charCodeAt(0));//104console.log(str.charCodeAt(1));//101console.log(str.charCodeAt(-1));//NaNconsole.log(str.charCodeAt(10));//NaNconsole.log(str.charCodeAt(NaN));//104

String類型的屬性和方法

  同樣地,charCodeAt()方法涉及到Number()函數(shù)的隱式類型轉(zhuǎn)換,如果轉(zhuǎn)換為數(shù)值,則按照上述規(guī)則輸出相應(yīng)值;如果轉(zhuǎn)換為NaN,則輸出第0個(gè)字符的字符編碼

String類型的屬性和方法

var str = "hello";
console.log(str.charCodeAt(true));//101console.log(str.charCodeAt(false));//104console.log(str.charCodeAt('abc'));//104console.log(str.charCodeAt({}));//104console.log(str.charCodeAt([2]));//l08

String類型的屬性和方法

【fromCharCode()】

  String構(gòu)造函數(shù)本身有一個(gè)靜態(tài)方法:fromCharCode()。這個(gè)方法的任務(wù)是接收一個(gè)或多個(gè)字符編碼,然后把它們轉(zhuǎn)換成一個(gè)字符串。從本質(zhì)上看,這個(gè)方法與實(shí)例方法charCodeAt()執(zhí)行的是相反的操作。若參數(shù)為空或NaN時(shí),則返回空字符串;若參數(shù)超出0-65535的范圍,則輸出字符不可控

String類型的屬性和方法

console.log(String.fromCharCode(104,101,108,108,111));//'hello'console.log(String.fromCharCode(0x6211,0x662f,0x5c0f,0x706b,0x67f4));//'我是小火柴'console.log(String.fromCharCode());//''console.log(String.fromCharCode(NaN));//''console.log(String.fromCharCode(-1));
console.log(String.fromCharCode(65560));

String類型的屬性和方法

  如果一個(gè)字符占用四字節(jié),則需要拆成兩個(gè)字符表示

console.log(String.fromCharCode(0xD842, 0xDFB7)); // ""

 

字符串拼接

  關(guān)于字符串拼接共有concat()和加號(hào)+兩種方法

【concat()】

  concat()方法用于將一個(gè)或多個(gè)字符串拼接起來,返回拼接得到的新字符串,而原字符串不發(fā)生改變。若參數(shù)(第一個(gè)參數(shù)除外)不是字符串,則通過String()方法隱式轉(zhuǎn)換為字符串,再進(jìn)行字符串拼接

var stringValue = 'hello ';var result = stringValue.concat('world','!');
console.log(result);//'hello world!'console.log(stringValue);//'hello'

  [注意]第一個(gè)參數(shù)只能是字符串,如果是其他類型(數(shù)組除外)則報(bào)錯(cuò)

(1).concat('2');//報(bào)錯(cuò)(true).concat('false');//報(bào)錯(cuò)({}).concat('abc');//報(bào)錯(cuò)

  [注意]由于數(shù)組也存在concat()方法,參數(shù)會(huì)按照首先出現(xiàn)的參數(shù)是數(shù)組還是字符串來決定如何轉(zhuǎn)換

'1,2,3,'.concat([4,5]);//'1,2,3,4,5'[1,2,3].concat(',4,5');//[1, 2, 3, ",4,5"]

【加號(hào)運(yùn)算符(+)】

  雖然concat()是專門用來拼接字符串的方法,但實(shí)踐中使用更多的還是加號(hào)運(yùn)算符(+)。使用加號(hào)運(yùn)算符在許多時(shí)候都比concat()簡單方便

var stringValue = 'hello ';
console.log(stringValue.concat('world','!'));//'hello world!'console.log(stringValue + 'world' + '!');//'hello world!'

  [注意]當(dāng)操作數(shù)其中一個(gè)是字符串,或者對(duì)象轉(zhuǎn)換為字符串時(shí),才進(jìn)行字符串拼接

String類型的屬性和方法

1 + 2;//3'1' + 2;//'12'var o = {valueOf:function(){return '1';}};
o + 2;//'12'var o = {valueOf:function(){return 1;}};
o + 2;//3

String類型的屬性和方法

 

創(chuàng)建子字符串

  創(chuàng)建子字符串共有slice()、substr()和substring()三種方法

【slice()】

  slice(start,end)方法需要兩個(gè)參數(shù)start和end,返回這個(gè)字符串中從start位置的字符到(但不包含)end位置的字符的一個(gè)子字符串;如果end為undefined或不存在,則返回從start位置到字符串結(jié)尾的所有字符

  如果start是負(fù)數(shù),則start = max(length + start,0)

  如果end是負(fù)數(shù),則end = max(length + end,0)

  start和end無法交換位置

String類型的屬性和方法

var stringValue = 'hello world';
console.log(stringValue.slice());//'hello world'console.log(stringValue.slice(2));//'llo world'console.log(stringValue.slice(2,undefined));//'llo world'console.log(stringValue.slice(2,-5));//'llo 'console.log(stringValue.slice(2,-20));//''console.log(stringValue.slice(20));//''console.log(stringValue.slice(-2,2));//''console.log(stringValue.slice(-2,-20));//''            console.log(stringValue.slice(-2,20));//'ld'console.log(stringValue.slice(-20,2));//'he'console.log(stringValue.slice(-20,-2));//'hello wor'

String類型的屬性和方法

  slice()方法涉及到Number()轉(zhuǎn)型函數(shù)的隱式類型轉(zhuǎn)換,當(dāng)start被轉(zhuǎn)換為NaN時(shí),相當(dāng)于start = 0;當(dāng)end被轉(zhuǎn)換為NaN時(shí)(end為undefined除外),則輸出空字符串

String類型的屬性和方法

var stringValue = 'hello world';
console.log(stringValue.slice(NaN));//'hello world'console.log(stringValue.slice(0,NaN));//''console.log(stringValue.slice(true,[3]));//'el'console.log(stringValue.slice(null,undefined));//'hello world'console.log(stringValue.slice({}));//'hello world'console.log(stringValue.slice('2',[5]));//'llo'

String類型的屬性和方法

【substring()】

  substring(start,end)方法需要兩個(gè)參數(shù)start和end,返回這個(gè)字符串中從start位置的字符到(但不包含)end位置的字符的一個(gè)子字符串;如果end為undefined或不存在,則返回從start位置到字符串結(jié)尾的所有字符

  如果任一參數(shù)是NaN或負(fù)數(shù),則被0取代

  如果任一參數(shù)大于字符串長度,則被字符串長度取代

  如果start 大于 end,則交換它們的值

String類型的屬性和方法

var stringValue = 'hello world';
console.log(stringValue.substring());//'hello world'console.log(stringValue.substring(2));//'llo world'console.log(stringValue.substring(2,undefined));//'llo world'console.log(stringValue.substring(20));//''console.log(stringValue.substring(-2,2));//'he'console.log(stringValue.substring(NaN,2));//'he'console.log(stringValue.substring(-2,20));//'hello world'console.log(stringValue.substring(3,2));//'l'console.log(stringValue.substring(3,NaN));//'hel'console.log(stringValue.substring(-20,2));//'he'console.log(stringValue.substring(-20,-2));//''

String類型的屬性和方法

  同樣地,substring()方法也涉及到Number()轉(zhuǎn)型函數(shù)的隱式類型轉(zhuǎn)換

var stringValue = 'hello world';
console.log(stringValue.substring(true,[3]));//'el'console.log(stringValue.substring(null,undefined));//'hello world'console.log(stringValue.substring({}));//'hello world'console.log(stringValue.substring('2',[5]));//'llo'

【substr()】

  substr(start,end)方法需要兩個(gè)參數(shù)start和end,end代表返回的子字符串的字符個(gè)數(shù);該方法返回這個(gè)字符串中從start位置的字符開始的end個(gè)字符的一個(gè)子字符串;如果end為undefined或不存在,則返回從start位置到字符串結(jié)尾的所有字符

  如果start是負(fù)數(shù),則start = max(length + start,0)

  如果start是NaN,則相當(dāng)于start = 0

  如果end是負(fù)數(shù)或NaN,則end = 0,因此會(huì)返回空字符串

  start和end無法交換位置

  [注意]該方法不是ECMAScript標(biāo)準(zhǔn),已經(jīng)被棄用

  [注意]IE8-瀏覽器在處理向substr()傳遞負(fù)值的情況時(shí)存在問題,它會(huì)返回原始的字符串

String類型的屬性和方法

var stringValue = 'hello world';
console.log(stringValue.substr());//'hello world'console.log(stringValue.substr(2));//'llo world'console.log(stringValue.substr(2,undefined));//'llo world'console.log(stringValue.substr(2,NaN));//''console.log(stringValue.substr(NaN,2));//'he'console.log(stringValue.substr(20));//''console.log(stringValue.substr(-2,3));//'ld'console.log(stringValue.substr(-2,20));//'ld'console.log(stringValue.substr(-20,2));//'he'console.log(stringValue.substr(-20,-2));//''    console.log(stringValue.substr(2,5));//llo w

String類型的屬性和方法

  同樣地,substr()方法也涉及到Number()轉(zhuǎn)型函數(shù)的隱式類型轉(zhuǎn)換

var stringValue = 'hello world';
console.log(stringValue.substr(true,[3]));//'el'console.log(stringValue.substr(null,undefined));//'hello world'console.log(stringValue.substr({}));//'hello world'console.log(stringValue.substr('2',[5]));//'llo w'

  [注意]對(duì)于以上三個(gè)創(chuàng)建子串的方法來說,如果是空字符串,則無論參數(shù)是什么,仍然返回空字符串

var str = '';
console.log(str.slice(1));//''console.log(str.substring(1));//''console.log(str.substr(1));//''

 

大小寫轉(zhuǎn)換

  ECMAScript中涉及字符串大小寫轉(zhuǎn)換的方法有4個(gè):toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase()

  toLowerCase()和toUpperCase()是兩個(gè)經(jīng)典的方法,借鑒自java.lang.String中的同名方法。而toLocaleLowerCase()和toLocaleUpperCase()方法則是針對(duì)特定地區(qū)的實(shí)現(xiàn),對(duì)有些地區(qū)來說,針對(duì)地區(qū)的方法與其通用方法得到的結(jié)果相同,但少數(shù)語言(如土耳其語)會(huì)為Unicode大小寫轉(zhuǎn)換應(yīng)用特殊的規(guī)則,這時(shí)候就必須使用針對(duì)地區(qū)的方法來保證實(shí)現(xiàn)正確的轉(zhuǎn)換

【toUpperCase()】

  toUpperCase()方法將字符串轉(zhuǎn)換成大寫

【toLowerCase()】

  toLowerCase()方法將字符串轉(zhuǎn)換成小寫

【toLocaleUpperCase()】

  toLocaleUpperCase()方法將字符串轉(zhuǎn)換成大寫(針對(duì)地區(qū))

【toLocaleLowerCase()】

  toLocaleLowerCase()方法將字符串轉(zhuǎn)換成小寫(針對(duì)地區(qū))

  [注意]在不知道自己的代碼將在哪個(gè)語言環(huán)境中運(yùn)行的情況下,使用針對(duì)地區(qū)的方法更穩(wěn)妥

var string = 'Hello World';
console.log(string.toLowerCase());//hello worldconsole.log(string.toLocaleLowerCase());//hello worldconsole.log(string.toUpperCase());//HELLO WORLDconsole.log(string.toLocaleUpperCase());//HELLO WORLD

  這4種方法均不支持String()隱式類型轉(zhuǎn)換,只支持字符串類型

(true).toLowerCase();//報(bào)錯(cuò)(2).toLocaleLowerCase();//報(bào)錯(cuò)({}).toUpperCase();//報(bào)錯(cuò)([]).toLocaleUpperCase();//報(bào)錯(cuò)

  [注意]大小寫轉(zhuǎn)換方法可以連續(xù)使用

var string = 'Hello World';
console.log((string.toUpperCase()).toLowerCase());//hello world

   將帶有分割符的字符串轉(zhuǎn)換為駝峰的形式

String類型的屬性和方法

var txt = "border-top-left";var arr = txt.split('-');for(var i = 1; i < arr.length; i++){
    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
}var result = arr.join('');
console.log(result);//'borderTopLeft"

String類型的屬性和方法

 

查找子串位置

  有兩個(gè)從字符串中查找子字符串位置的方法:indexOf()和lastIndexOf()。查找子串位置的方法同訪問字符方法charAt()和中括號(hào)[]方法有相反的地方,一個(gè)通過字符串查找位置,一個(gè)則是通過位置查找字符

【indexOf()】

  indexOf(searchString,start)方法接收searchString和start兩個(gè)參數(shù),返回searchString首次出現(xiàn)的位置,如果沒有找到則返回-1

  該方法會(huì)隱式調(diào)用String()轉(zhuǎn)型函數(shù),將searchString非字符串值轉(zhuǎn)換為字符串;隱式調(diào)用Number()轉(zhuǎn)型函數(shù),將start非數(shù)字值(undefined除外)轉(zhuǎn)換為數(shù)值

  searchString表示要搜索的子字符串;start表示該搜索的開始位置,若忽略該參數(shù)或該參數(shù)為undefined、NaN或負(fù)數(shù)時(shí),start = 0

String類型的屬性和方法

var string = 'hello world world';
console.log(string.indexOf('ld'));//9console.log(string.indexOf('ld',undefined));//9console.log(string.indexOf('ld',NaN));//9console.log(string.indexOf('ld',-1));//9console.log(string.indexOf('ld',10));//15console.log(string.indexOf('ld',[10]));//15console.log(string.indexOf('true',[10]));//-1console.log(string.indexOf(false,[10]));//-1

String類型的屬性和方法

【lastIndexOf()】

  與indexOf()不同,lastIndexOf()從右向左查找

  lastIndexOf(searchString,start)方法接收searchString和start兩個(gè)參數(shù),返回searchString第一次出現(xiàn)的位置,如果沒有找到則返回-1

  同樣地,該方法會(huì)隱式調(diào)用String()轉(zhuǎn)型函數(shù),將searchString非字符串值轉(zhuǎn)換為字符串;隱式調(diào)用Number()轉(zhuǎn)型函數(shù),將start非數(shù)字值(undefined除外)轉(zhuǎn)換為數(shù)值

  searchString表示要搜索的子字符串;start表示該搜索的開始位置,若忽略該參數(shù)或該參數(shù)為undefined、NaN時(shí),start = length - 1;若start為負(fù)數(shù),start = 0

String類型的屬性和方法

var string = 'hello world world';
console.log(string.lastIndexOf('ld'));//15console.log(string.lastIndexOf('ld',undefined));//15console.log(string.lastIndexOf('ld',NaN));//15console.log(string.lastIndexOf('ld',-1));//-1console.log(string.lastIndexOf('h',-1));//0console.log(string.lastIndexOf('w',undefined));//12console.log(string.lastIndexOf('ld',10));//9console.log(string.lastIndexOf('ld',[10]));//9console.log(string.lastIndexOf('true',[10]));//-1console.log(string.lastIndexOf(false,[10]));//-1

String類型的屬性和方法

  【tips】查找出字符串所有符合條件的子字符串

  可以通過循環(huán)調(diào)用indexOf()或lastIndexOf()來找到所有匹配的子字符串

String類型的屬性和方法

function allIndexOf(str,value){    var result = [];    var pos = str.indexOf(value);    while(pos > -1){
        result.push(pos);
        pos = str.indexOf(value,pos+value.length);
    }    return result;
}
console.log(allIndexOf('helllhelllhelll','ll'));//[2,7,12]

String類型的屬性和方法

  lastIndexOf()方法常用于獲取URL地址中的擴(kuò)展名

String類型的屬性和方法

var url = "http://cnblogs.com/xiaohuochai.txt";function getFileFormat(url){    var pos = url.lastIndexOf('.');    return url.slice(pos+1);
}
console.log(getFileFormat(url));//'txt'

String類型的屬性和方法

 

正則匹配方法

  javascript中的一些正則操作如查找和測(cè)試等可以通過RegExp的方法實(shí)現(xiàn),而切分和替換等另一些操作可以通過String類的方法實(shí)現(xiàn)

  String類共有match()、search()、replace()、split()這4種正則匹配方法 

【match()】

  match()方法只接受一個(gè)為正則或字符串的參數(shù),并以數(shù)組的形式返回匹配的內(nèi)容。這個(gè)方法類似于正則表達(dá)式RegExp的exec()方法,只是調(diào)換了RegExp和String對(duì)象的位置

  若匹配失敗,則match()方法返回null

'x'.match(/y/);//null

  【1】若不設(shè)置全局標(biāo)志,match()方法和exec()方法結(jié)果相同

String類型的屬性和方法

var string = 'cat,bat,sat,fat';var pattern = /.at/;var matches = string.match(pattern);
console.log(matches,matches.index,matches.input);//['cat'] 0 'cat,bat,sat,fat' var matches = string.match(pattern);
console.log(matches,matches.index,matches.input);//['cat'] 0 'cat,bat,sat,fat' var string = 'cat,bat,sat,fat';var pattern = /.at/;var exec = pattern.exec(string);
console.log(exec,exec.index,exec.input);//['cat'] 0 'cat,bat,sat,fat' var exec = pattern.exec(string);
console.log(exec,exec.index,exec.input);//['cat'] 0 'cat,bat,sat,fat'

String類型的屬性和方法

  【2】設(shè)置全局標(biāo)志后,exec()方法依然返回單次的匹配結(jié)果,而match()方法會(huì)返回一個(gè)字符串?dāng)?shù)組,其中包括各次成功匹配的文本,但沒有index和input屬性

String類型的屬性和方法

var string = 'cat,bat,sat,fat';var pattern = /.at/g;var matches = string.match(pattern);
console.log(matches,matches.index,matches.input);//["cat", "bat", "sat", "fat"] undefined undefined var matches = string.match(pattern);
console.log(matches,matches.index,matches.input);//["cat", "bat", "sat", "fat"] undefined undefined var string = 'cat,bat,sat,fat';var pattern = /.at/g;var exec = pattern.exec(string);
console.log(exec,exec.index,exec.input);//['cat'] 0 'cat,bat,sat,fat' var exec = pattern.exec(string);
console.log(exec,exec.index,exec.input);//['bat'] 4 'cat,bat,sat,fat'

String類型的屬性和方法

  【3】match()方法作為字符串String的方法,接受參數(shù)為字符串,結(jié)果與不設(shè)置全局標(biāo)志的正則表達(dá)式為參數(shù)相同,只返回第一個(gè)匹配項(xiàng),且具有index和input屬性

var string = 'cat,bat,sat,fat';var matches = string.match('at');
console.log(matches,matches.index,matches.input);//['at'] 1 'cat,bat,sat,fat'var matches = string.match('at');
console.log(matches,matches.index,matches.input);//['at'] 1 'cat,bat,sat,fat'

  當(dāng)不設(shè)置全局標(biāo)志時(shí),match()方法和exec()方法都包含捕獲分組的信息;設(shè)置全局標(biāo)志后,match()方法不包含捕獲分組的信息

String類型的屬性和方法

var string = 'cat,bat,sat,fat';var pattern = /(.)at/g;var matches = string.match(pattern);
console.log(matches);//['cat', 'bat', 'sat', 'fat'] var exec = pattern.exec(string);
console.log(exec);//['cat','c'] var string = 'cat,bat,sat,fat';var pattern = /(.)at/;var matches = string.match(pattern);
console.log(matches);//['cat','c']  var exec = pattern.exec(string);
console.log(exec);//['cat','c']

String類型的屬性和方法

  【tips】兩種方法找出字符串中所有的數(shù)字

  【1】用charAt()方法

String類型的屬性和方法

var str1 = 'j1h442jg24g234j 3g24j1';var array = [];var temp = '';for(var i = 0; i < str1.length; i++){    var value = parseInt(str1.charAt(i));//如果用Number()將無法排除空格
    if(!isNaN(value)){
        temp += str1.charAt(i);
    }else{        if(temp != ''){
            array.push(temp);
            temp = '';    
        }
    }
}if(temp != ''){
    array.push(temp);
    temp = '';    
}
console.log(array);//["1", "342", "24", "234", "3", "24", "1"]

String類型的屬性和方法

  【2】用match()方法

var str1 = 'j1h442jg24g234j 3g24j1';
array = str1.match(/\d+/g);
console.log(array);//["1", "342", "24", "234", "3", "24", "1"]

【search()】

  search()方法接受一個(gè)正則或字符串的參數(shù),返回匹配的內(nèi)容在字符串中首次出現(xiàn)的位置,類似于不能設(shè)置起始位置的indexOf,找不到返回-1

  [注意]search()方法不執(zhí)行全局匹配,忽略全局標(biāo)志g,也會(huì)忽略RegExp對(duì)象的lastIndex屬性,總是從字符串的開始位置開始搜索

'x'.search(/y/);//-1

String類型的屬性和方法

var string = 'cat,bat,sat,fat';var pattern = /.at/;var pos = string.search(pattern);
console.log(pos);//0var string = 'cat,bat,sat,fat';var pattern = /.at/g;var pos = string.search(pattern);
console.log(pos);//0var string = 'cat,bat,sat,fat';var pattern = 'at';var pos = string.search(pattern);
console.log(pos);//1

String類型的屬性和方法

  【tips】找出匹配的所有位置

String類型的屬性和方法

function fnAllSearch(str,pattern){    var pos = str.search(pattern); 
    var length = str.match(pattern)[0].length;    var index = pos+length;    var result = [];    var last = index;
    result.push(pos);    while(true){
        str = str.substr(index);                    
        pos = str.search(pattern);        if(pos === -1){            break;
        }
        length = str.match(pattern)[0].length;
        index = pos+length;
        result.push(last+pos);
        last += index;    
    }    return result;
}    
console.log(fnAllSearch('cat23fbat246565sa3dftf44at',/\d+/));//[3,9,17,22]

String類型的屬性和方法

【replace()】

  replace()方法用于替換一個(gè)或多個(gè)子字符串。它接收兩個(gè)參數(shù):第一個(gè)是正則表達(dá)式或字符串,表示待查找的內(nèi)容;第二個(gè)是字符串或函數(shù),表示替換內(nèi)容。返回替換后的字符串

  【1】字符串替換,只能替換第一個(gè)子字符串

var string = 'cat,bat,sat,fat';var result = string.replace('at','ond');
console.log(result);//'cond,bat,sat,fat'

  【2】不設(shè)置全局標(biāo)志g,也只能替換第一個(gè)子字符串

var string = 'cat,bat,sat,fat';var result = string.replace(/at/,'ond');
console.log(result);//'cond,bat,sat,fat'

  【3】設(shè)置全局標(biāo)志g,替換所有匹配的子字符串

var string = 'cat,bat,sat,fat';var result = string.replace(/at/g,'ond');
console.log(result);//'cond,bond,sond,fond'

  與match()和seartch()方法相比,replace()方法更為強(qiáng)大,它可以在第二個(gè)參數(shù)中通過短屬性名來使用某些正則表達(dá)式的靜態(tài)屬性

短屬性名         說明
$&              最近一次的匹配項(xiàng)
$`              匹配項(xiàng)之前的文本
$'              匹配項(xiàng)之后的文本
$1,$2...        表示第N個(gè)匹配捕獲組

String類型的屬性和方法

var string = 'cat-bat-sat-fat';
console.log(string.replace(/(.)(at)/g,'$&'));//'cat-bat-sat-fat'console.log(string.replace(/(.)(at)/g,'$`'));//'-cat--cat-bat--cat-bat-sat-'console.log(string.replace(/(.)(at)/g,"$'"));//'-bat-sat-fat--sat-fat--fat-'console.log(string.replace(/(.)(at)/g,'$1'));//'c-b-s-f'console.log(string.replace(/(.)(at)/g,'$2'));//'at-at-at-at'

String類型的屬性和方法

var string = '2016-06-24';
console.log(string.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1'));//'06/24/2016'

  replace()方法的第二個(gè)參數(shù)可以是函數(shù),這樣文本的處理更加靈活

  如果在只有一個(gè)匹配項(xiàng)的情況下,該方法會(huì)向這個(gè)函數(shù)傳遞3個(gè)參數(shù):模式的匹配項(xiàng)、模式匹配項(xiàng)在字符串中的位置、原始字符串

String類型的屬性和方法

var string = 'cat,bat,sat,fat';var index = 0;var matchArray = [];var posArray = [];var text = '';var result = string.replace(/at/g,function(match,pos,originalText){
    matchArray.push(match);
    posArray.push(pos);
    text = originalText;
    index++;    if(index % 2){        return 'wow';
    }else{        return '0';
    }
});
console.log(matchArray);//["at", "at", "at", "at"]console.log(posArray);//[1, 5, 9, 13]console.log(text);//'cat,bat,sat,fat'console.log(result);//'cwow,b0,swow,f0'

String類型的屬性和方法

  如果正則表達(dá)式定義多個(gè)捕獲組,則該方法傳遞給函數(shù)的參數(shù)依次是模式的匹配項(xiàng)、第一個(gè)捕獲組的匹配項(xiàng)、第二個(gè)捕獲組的匹配項(xiàng)……第N個(gè)捕獲組的匹配項(xiàng),但最后兩個(gè)參數(shù)仍然分別是模式的匹配項(xiàng)在字符串中的位置和原始字符串,這個(gè)函數(shù)返回一個(gè)字符串

String類型的屬性和方法

var string = 'cat,bat,sat,fat';var index = 0;var matchArray = [];var m1Array = [];var posArray = [];var text = '';var result = string.replace(/(.)at/g,function(match,m1,pos,originalText){
    matchArray.push(match);
    m1Array.push(m1);
    posArray.push(pos);
    text = originalText;    return m1 + 'ta';
});
console.log(matchArray);//["cat", "bat", "sat", "fat"]console.log(m1Array);//['c','b','s','f']console.log(posArray);//[1, 5, 9, 13]console.log(text);//'cat,bat,sat,fat'console.log(result);//'cta,bta,sta,fta'

String類型的屬性和方法

  【tips】首字母大寫

var text = 'one two three';var result = text.replace(/\b(\w+)\b/g,function(match,m1,pos,originalText){    return m1.charAt(0).toUpperCase()+m1.substring(1); 
})
console.log(result);

  【tips】HTML標(biāo)簽轉(zhuǎn)義

String類型的屬性和方法

function htmlEscape(text){    return text.replace(/[<>"&]/g,function(match,pos,originalText){        switch(match){            case '<':            return '&lt;';            case '>':            return '&gt;';            case '&':            return '&amp;';            case '\"':            return '&quot;';
        }
    });
}
console.log(htmlEscape('<p class=\"greeting\">Hello world!</p>'));//&lt;p class=&quot; greeting&quot;&gt;Hello world!&lt;/p&gt;console.log(htmlEscape('<p class="greeting">Hello world!</p>'));//同上

String類型的屬性和方法

  【tips】日期格式化

String類型的屬性和方法

var array = ['2015.7.28','2015-7-28','2015/7/28','2015.7-28','2015-7.28','2015/7---28'];function formatDate(date){    return date.replace(/(\d+)\D+(\d+)\D+(\d+)/,'$1年$2月$3日')
}var result = [];for(var i = 0 ; i < array.length; i++){
    result.push(formatDate(array[i]));
}
console.log(result);//["2015年7月28日", "2015年7月28日", "2015年7月28日", "2015年7月28日", "2015年7月28日", "2015年7月28日"]

String類型的屬性和方法

  【tips】找出重復(fù)項(xiàng)最多的字符和個(gè)數(shù)

String類型的屬性和方法

var str = 'aaaaabbbbbdddddaaaaaaaffffffffffffffffffgggggcccccce';var pattern = /(\w)\1+/g;var maxLength = 0;var maxValue = '';var result = str.replace(pattern,function(match,match2,pos,originalText){    if(match.length > maxLength){
        maxLength = match.length;
        maxValue = match2;
    }
})
console.log(maxLength,maxValue);//18 "f"

String類型的屬性和方法

【split()】

  split()方法基于指定的分隔符將一個(gè)字符串分割成多個(gè)字符串,并將結(jié)果放在一個(gè)數(shù)組中,分隔符可以是字符串,也可以是一個(gè)RegExp

  該方法可以接受第二個(gè)參數(shù)(可選)用于指定數(shù)組的大小,如果第二個(gè)參數(shù)為0-array.length范圍內(nèi)的值時(shí)按照指定參數(shù)輸出,其他情況將所有結(jié)果都輸出

  若指定分隔符沒有出現(xiàn)在字符串中,則以數(shù)組的形式返回原字符串的值

  [注意]參數(shù)中的正則表達(dá)式是否使用全局標(biāo)志g對(duì)結(jié)果沒有影響

String類型的屬性和方法

var colorText = 'red,blue,green,yellow';
console.log(colorText.split(''));//["r", "e", "d", ",", "b", "l", "u", "e", ",", "g", "r", "e", "e", "n", ",", "y", "e", "l", "l", "o", "w"]console.log(colorText.split(','));//["red", "blue", "green", "yellow"]console.log(colorText.split(',',2));//["red", "blue"]console.log(colorText.split(',',6));//["red", "blue", "green", "yellow"]console.log(colorText.split('-'));//["red,blue,green,yellow"]console.log(colorText.split(/\,/));//["red", "blue", "green", "yellow"]console.log(colorText.split(/e/));//["r", "d,blu", ",gr", "", "n,y", "llow"]console.log(colorText.split(/[^\,]+/));//將除去逗號(hào)以外的字符串變?yōu)榉指舴鸞"", ",", ",", ",", ""],IE8-會(huì)識(shí)別為[",",",",","]

String類型的屬性和方法

 

去除首尾空格

【trim()】

  ECMAScript5為所有字符串定義了trim()方法。這個(gè)方法會(huì)創(chuàng)建一個(gè)字符串的副本,刪除前置及后綴的所有空白字符,然后返回結(jié)果

  由于trim()方法返回的是字符串的副本,所以原始字符串中的前置及后綴空格會(huì)保持不變

  [注意]IE8-瀏覽器不支持

var string = '    hello world   ';
console.log(string.trim());//'hello world'console.log(string);//'    hello world   '

  空白字符不僅僅包括空格,還包括制表符(\t)、換行符(\n)和回車符(\r)

'\r\nabc \t'.trim() // 'abc'

  此外,firefox、safari和webkit還支持非標(biāo)準(zhǔn)的trimRight()用于刪除字符串結(jié)尾的空白字符

var string = '    hello world   ';
console.log(string.trimRight());//'    hello world';

  【tips】用trim()來判斷輸入的字符是否為空

if(usename.trim().length){
     alert('correct');
}else{
      alert('error');
}

  【tips】用正則表達(dá)式模擬trim()

function fnTrim(str){    return str.replace(/^\s+|\s+$/,'')
}  
console.log(fnTrim('      hello world   '));//'hello world'

 

字符串比較

【localeCompare()】

  localeCompare()方法用于比較兩個(gè)字符串,遵循下列規(guī)則

  【1】如果字符串在字母表中應(yīng)該排在字符串參數(shù)之前,則返回一個(gè)負(fù)數(shù)(大多數(shù)情況下為-1)

  【2】如果字符串等于字符串參數(shù),則返回0

  【3】如果字符串在字母表中應(yīng)該排在字符串參數(shù)之后,則返回一個(gè)正數(shù)(大多數(shù)情況下為1)

var stringValue = 'yellow';
console.log(stringValue.localeCompare('brick'));//1  'y'> 'b'console.log(stringValue.localeCompare('yellow'));//0    'yellow' == 'yellow'console.log(stringValue.localeCompare('zoo'));//-1        'yellow' < 'zoo'

String類型的屬性和方法

  [注意]雖然在字母表中大寫字母在小寫字母的前面,所以大寫字母 < 小寫字母。但localeCompare()方法會(huì)考慮自然語言的排序情況,把'B'排在'a'的后面

console.log('B'.localeCompare('a'));//1console.log('B' > 'a');//falseconsole.log('b'.localeCompare('a'));//1console.log('b' > 'a');//true


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI