題目: 寫一個函式判斷字串中x的數量和o的數量是否相等(忽略大小寫): XO("ooxx") => true XO("xooxx") => false XO("ooxXm") => true XO("zpzpzpp") => true // 沒有x也沒有o,認為它們的長度都是0,也為相等. XO("zzoo") => false
function XO(str){
let x=str.match(/x/ig);//求出x的陣列
let o=str.match(/o/ig);//求出o的陣列
if(x&&o){
return x.length==o.length?true:false;
}else if(!x&&!o){
return true
}else {
return false;
}
}
複製程式碼
此題中主要用到了字串的match方法,下面我們簡單的回顧下match的用法
- 匹配字元:
let str="abc";
let c=str.match("a");
console.log(c);
["a", index: 0, input: "abc"]
複製程式碼
c 的返回值,如果有,返回值是一個陣列,第一項代表要匹配的字元"a",第二項,index 就是找到a第一次出現的位置,input代表的是整個原始的字串.如果字串中沒有符合條件的就是返回null
- 匹配正則:
let str="abcAbx";
let c=str.match(/a/ig);
console.log(c);
["a", "A"];
複製程式碼
match匹配正則的時候,如果找到符合條件的返回的陣列,如果找不到返回的就是null;
在會的基礎上尋找更優的做法
- 1 str.split 結合filter方法(filter方法中的方法體如果不加大括號就相當於return)
function XO(str){
str=str.toLowerCase().split("");
return str.filter(item=>item==='x').length===str.filter(item=>item==='o').length
}
複製程式碼
*2 正則匹配
function XO(str){
return (str.match(/x/ig)||[]).length===(str.match(/o/ig)||[]).length ;
}
複製程式碼