1. String: 由多個字符組成的字符只讀數組
vs 數組: 相同: 1. 下標, 2. .length, 3. 遍歷, 4. .slice
不同: 類型不同! API不通用
API: 所有字符串API,都無權修改原字符串,只能返回新字符串
大小寫轉換: 將字符串中的字母統一轉為大寫/小寫
何時: 不區分大小寫時
如何: str.toUpperCase() 轉大寫
str.toLowerCase() 轉小寫
說明: sql語句默認不區分大小寫
如果希望密碼區分大小寫: binary upwd=$upwd
獲取指定位置的字符:
str[i] str.charAt(i)
獲取指定位置字符的unicode號
var unicode=str.charCodeAt(i)
將unicode號變回字:
var char=String.fromCharCode(unicode)
選取子字符串:
str.slice(starti,endi+1) 含頭不含尾
.slice(starti,-n) 到倒數第n個之前
=> .slice(starti, str.length-n)
.slice(starti) 選取到結尾
.slice() 選取全部
.slice(starti,starti+n) 選擇n個
str.substring(starti, endi+1) 用法同slice
問題: 不支持負數參數
str.substr(starti,n) 選擇n個
查找關鍵詞: 4種:
1. 查找一種固定的關鍵詞出現的位置:
var i=str.indexOf("關鍵詞",fromi);
在str中,從fromi位置開始,找下一個"關鍵詞"出現的位置
返回值: 第一個關鍵詞的位置
如果找不到,返回-1
var i=str.lastIndexOf("關鍵詞");
查找str中"關鍵詞"最后一次出現的位置
問題: 關鍵詞可能發生變化
解決: 用正則查找關鍵詞:
2. 判斷是否包含關鍵詞:
var i=str.search(/正則表達式/)
查找str中第一個符合正則表達式規則的關鍵詞的位置
返回值: 關鍵詞的位置
如果沒找到,返回-1
問題: 所有正則,默認區分大小寫的
解決: 在第二個/后加i, ignore
問題: 無法獲得關鍵詞的內容
3. 獲得關鍵詞的內容:
1. 只獲得第一個關鍵詞的內容:
var arr=str.match(/正則表達式/i);
查找str中第一個符合正則表達式要求的關鍵詞的位置和內容
返回值: [ 0: 關鍵詞, index: 位置]
如果沒找到返回null
2. 獲得所有關鍵詞的內容:
var arr=str.match(/正則表達式/ig);
其中g: global
返回所有關鍵詞組成的數組
問題: 只能獲得內容,無法獲得每個關鍵詞的位置:
4. 即查找每個關鍵詞的內容,又查找每個關鍵詞的位置:
替換: 2種:
1. 簡單替換:將所有敏感詞,替換為統一的值
str=str.replace(/正則表達式/ig, "替換值");
2. 高級替換:根據每個敏感詞的不同,動態選擇不同的替換值
str=str.replace(/正則表達式/ig, function(kw){
//kw: 可自動獲得本次找到的一個關鍵詞
return 根據kw的不同,動態選擇不同返回值
});
原理: 回調函數function()會自動在每個找到的關鍵詞上調用一次。調用時,參數kw會自動接住當前關鍵詞。return返回的新值,會被替換到關鍵詞所在位置。
衍生操作: 刪除: 替換為空字符串
str=str.replace(/正則/ig,"")
切割:
2. 正則表達式:
什么是: 規定一個字符串中字符出現規律的規則
何時: 2種:
1. 用一套規則,模糊匹配多種敏感詞
2. 用規則驗證字符串是否符合格式要求
如何:
1. 最簡單的規則: 就是關鍵詞本身
2. 字符集:
什么是: 一位字符上所有備選字符的列表
何時: 如果一位字符上,有多種備選字時
如何: [備選字符列表]
強調: 一個字符集,只能匹配一位字符
簡寫: 如果字符集中部分字符是連續的,可用-省略中間字符: 比如:
1位數字: [0-9]
1位小寫字母: [a-z]
1位大寫字母: [A-Z]
1位字母: [A-Za-z]
1位字母或數字: [0-9A-Za-z]
1位漢字: [\u4e00-\u9fa5]
除了: [^47]
3. 預定義字符集:
\d 一位數字: [0-9]
\w 一位字母,數字或下划線: [0-9A-Za-z_]
\s 一位空字符: 空格, Tab, ...
. 通配符
問題: 無法靈活規定字符集出現的次數
4. 量詞:
什么是: 規定一位字符出現次數的規則
何時: 只要靈活定義一位字符出現的次數時
如何: 量詞緊跟在一個字符集之后,默認修飾相鄰的前一個字符集的個數
2大類:
1. 有明確數量邊界的
{n,m} 至少n個,最多m個
{n,} 至少n個,多了不限
{n} 必須n個
2. 沒有明確數量邊界
* 可有可無,多了不限
? 可有可無,最多一個
+ 至少一個,多了不限
5. 選擇和分組:
1. 選擇: 或 |
什么是: 在多組邏輯之間,任選其一匹配即可
何時: 只要在在多組邏輯之間,任選其一匹配
2. 分組: ( )
什么是: 將多個邏輯包裹為一組
問題: 默認,一個量詞只能修飾相鄰的一個字符集
何時: 如果希望一個量詞可以同時修飾多個字符集時
身份證號:
15位數字 2位數字 一位數字或X
后三位整體可有可無,最多1次
\d{15}(\d{2}[0-9X])?
手機號:
+86 或 0086 可有可無,最多1次
空字符 可有可無,多了不限
1
3~8
9位數字
(\+86|0086)?\s*1[3-8]\d{9}
?/+
6. 指定匹配位置:
^ 字符串開頭
$ 字符串結尾
何時: 只要匹配開頭的或結尾的內容時
比如: ^\s+ 開頭的空字符
\s+$ 結尾的空字符
^\s+|\s+$ 開頭或結尾的空字符
\b單詞邊界: 空格,標點,開頭,結尾,。。。
比如: 每個單詞首字符: \b[a-z]
一個單詞no \bno\b