js系列教程3-字串、正則表示式全解
阿新 • • 發佈:2019-01-10
全棧工程師開發手冊 (作者:欒鵬)
字串的生成轉換
你可以將任何型別的資料都轉換為字串,你可以用下面三種方法的任何一種:
var num= 19; // 19
var myStr = num.toString(); // "19"
var myStr = String(num); // "19"
var myStr = "" +num; // "19"
字串轉化為其他型別
js提供了parseInt()和parseFloat()兩個轉換函式,Number也可以實現轉化
parseInt("1234blue" ); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
parseInt("10", 2); //returns 2
parseInt("10", 8); //returns 8
parseInt("10", 10); //returns 10
parseInt("AF", 16); //returns 175
parseFloat("1234blue"); //returns 1234.0
parseFloat("0xA"); //returns NaN
parseFloat("22.5"); //returns 22.5
parseFloat("22.34.5"); //returns 22.34
parseFloat("0908"); //returns 908
parseFloat("blue"); //returns NaN
Number(false) //0
Number(true) //1
Number(undefined) //NaN
Number(null) //0
Number( "5.5 " ) //5.5
Number( "56 ") //56
Number( "5.6.7 ") //NaN
Number(new Object()) //NaN
Number(100) //100
字元的操作
var myStr = "I,love,you,Do,you,love,me";
var theChar = str.charAt(8); //獲取指定索引上的字元o
var theCharcode = myStr.charCodeAt(8); //獲取指定索引上的字元編碼 111
字串增刪查改
//替換
name = " Muaneng Tuanpeng ".trim(); //trim()刪除字串前後空格
name =name.replace("eng","ing"); //replace替換第一個eng成ing。
name =name.replace(/eng/g,"ing"); //replace接收正則表示式,/g替換全部。
//查詢
var beginindex=name.indexOf("t",name.length-10);//indexOf和lastindexOf查詢子字串的位置,第二個引數表示從哪個索引開始向對面搜尋。length函式表示取字串的長度。未查詢到時返回-1。
var endindex = name.lastIndexOf("g",0);
//擷取
var subStr = name.slice(1,5); //讀取子字串,起始下標(包含),結束下標(不包含)
name1 = name.substring(beginindex,endindex); //slice、substring引數為首尾下標,substr為起點下標和長度。都不改變源字串。
name1 = name.substr(-4); //傳入負值時,slice將負值加上字串長度,substr將第一個負值加上字串長度,第二個負值轉為0,substring將負值都轉為0
//拼接
name1 = name+"Yes"+1; //使用+號拼接字串和資料成一個新的字串
name1 = name.concat("yes"); //也可以使用concat函式拼接字串
//大小寫轉換
var lowCaseStr = name.toLowerCase(); //全部轉換為小寫
var upCaseStr = name.toUpperCase(); //全部轉化為大寫
字串比較
比較兩個字串,比較是規則是按照字母表順序比較的
var myStr = "chicken";
var myStrTwo = "egg";
var first = myStr.localeCompare(myStrTwo); // -1,表示小於
first = myStr.localeCompare("chicken"); // 0,表示等於
first = myStr.localeCompare("apple"); // 1,表示大於
字串分割
var myStr = "I,Love,You,Do,you,love,me";
var substrArray = myStr .split(","); // ["I", "Love", "You", "Do", "you", "love", "me"];
var arrayLimited = myStr .split(",", 3)[0]; // split()的第二個引數,表示返回的字串陣列的最大長度。這裡取["I", "Love", "You"]陣列的第一個元素,即"I";
正則法則
正則表示式 = /pattern/flags 其中flags中g表示匹配全部,i表示不區分大小寫,m表示匹配多行。
pattern包含 ([{\^$|)?*+.]}元字元,若匹配的字串中包含元字元,使用\轉義。
var patter1 = /(.)u/gi; //正則表示式,標誌沒有,可為空,也可以使用var patter1 = new RegExp("pattern","flags"),使用new是建立物件
if(patter1.test(name)){ //test查詢符合要求的子串是否存在,返回true
RegExp.input; //原始字串
RegExp.leftContext; //捕捉到的位置的左邊字串
RegExp.rightContext; //捕捉到的位置的右邊字串
RegExp.lastMatch; //返回最近一次與整個正則表示式匹配的字串 mu
RegExp.lastParen; //返回最近一次捕捉的字元
patter1.global; //返回正則是否包含全域性標誌g
}
var matches = patter1.exec(name); //查詢符合要求的子串。matches.index表示查詢到的起始下標,matches.input表示輸入字串。patter1.lastIndex表示查詢到的結束下標,matches[0]表示查詢到的第一個匹配項,若匹配項為全域性模式,則每次呼叫返回下一個匹配項。
正則表示式字元
\ 做為轉義,即通常在"\"後面的字元不按原來意義解釋,如/b/匹配字元"b",當b前面加了反斜杆後/\b/,轉意為匹配一個單詞的邊界。
-或-
對正則表示式功能字元的還原,如"*"匹配它前面元字元0次或多次,/a*/將匹配a,aa,aaa,加了"\"後,/a\*/將只匹配"a*"。
^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
$ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字元0次或多次,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字元1次或多次,/ba*/將匹配ba,baa,baaa
? 匹配前面元字元0次或1次,/ba*/將匹配b,ba
(x) 匹配x儲存x在名為$1...$9的變數中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配這個集合中的任一一個字元(或元字元)
[^xyz] 不匹配這個集合中的任何一個字元
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M
\d 匹配一個字數字符,/\d/ = /[0-9]/
\D 匹配一個非字數字符,/\D/ = /[^0-9]/
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配一個空白字元,包括\n,\r,\f,\t,\v等
\S 匹配一個非空白字元,等於/[^\n\f\r\t\v]/
\t 匹配一個製表符
\v 匹配一個重直製表符
\w 匹配一個可以組成單詞的字元(alphanumeric,這是我的意譯,含數字),包括下劃線,如[\w]匹配"$5.98"中的5,等於[a-zA-Z0-9]
\W 匹配一個不可以組成單詞的字元,如[\W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。
字串原型
通過修改字串的原型,可以為所有字串新增公共函式。
String.prototype.startwith = function(text){ //設定字串引用的原型,為String型別變數新增方法
return this.indexOf(text)==0;
};
var begin = name.startwith("mu"); //呼叫原型方法