2022年1月17日 星期一

在 JavaScript 的正規表達式取得比對結果的索引值

 在 JavaScript 的正規表達式取得比對結果的索引值

前言

  在之前的 在 JavaScript 初探正規表達式 簡單的使用正規表達式,但實際用後發現需要知道比對結果的索引值,做了個學習,在此做個紀錄。


內容

  範例如下

const reg = /ab*c/g;
let s = 'xxxabbc,xxxabc';
console.log( s.match(reg) );//["abbc", "abc"]
for( const match of s.matchAll(reg) ){
  console.log(match.index);
}


在上次的範例使用 string.match() 可以得到所以比對的結果,但有的時候會需要知道結果的索引值,所以要透過 string.matchAll() 來取得,這裡回傳的結果不再是 string ,而是一個類別,透果 index 來取得比對的結果的索引值。


參考資料

[ developer.mozilla.org ] String.prototype.matchAll()


相關文章與資料

在 JavaScript 初探正規表達式

2022年1月10日 星期一

在 Python 初探正規表達式

 在 Python 初探正規表達式

前言

  在先前的 在 JavaScript 初探正規表達式 裡使用正規表達式,想了一下 Python 也是預設就支援正規表達式,所以就順便做個學習,在此做個紀錄。


內容

  範例如下

import re
str = 'xxxabbc,xxxabc'
failedStr = 'failed string'
regEx = re.compile( 'ab*c' )
print( regEx.search( str ).span() )#(3, 7)
#check is match?
res = regEx.search( failedStr )
if res is not None:
    print('Match')
else:
    print('Not match')
#
print( regEx.findall( str ) )#['abbc', 'abc']


要在 Python 使用正規表達式需要透過 re 模組,透過 re.compile() 可以做出像 JavaScript 的 RegExp 一樣的類別,但這次不需要在字尾加'g',透過類別的 search() 可以取得比對的結果,但要注意回傳的是一個類別,利用回傳的類別的 span() 可以得到各個結果的起始位址,這裡有個不太直覺的地方, search() 在當沒有任何結果符合狀況時會回傳 None ,所以直接 search() 完喚起 span() 其實是有危險的!最後可以透過 findall() 來取得所有符合的結果,這裡回傳的就是陣列,就算沒有符合的結果也會回傳空陣列,可以安心使用。


參考資料

[ www.runoob.com ] Python 正则表达式


相關文章與資料

在 JavaScript 初探正規表達式

2022年1月3日 星期一

在 JavaScript 初探正規表達式

 在 JavaScript 初探正規表達式

前言

  雖然從很久以前就知道有正規表達式這樣的檢查字串手法,但因為我不常用到複雜的檢查字串規則,所以就一直能避就避的使用著它,最近剛好有空就用 JavaScript 來學習它,在此做個紀錄。


內容

  先看範例,如下

const reg = /ab*c/g;
let s = 'xxxabbc,xxxabc';
console.log( reg.test(s) );//true
console.log( s.match(reg) );//["abbc", "abc"]
console.log( s.replace(reg,'YYY') );//xxxYYY,xxxYYY


正規表達式用雙'/'來包住填入規則,但範例多了個'g'在字尾,這是'global search'的意思,待會會說明,範例的規則是a以後有0到多次的b,然後後有個c,這就是範例的規則,'ac'、'abc'、'abbc'...等都符合資格,接著可以透過 RegExp.test() 來檢查字串是否府合資格,RegExp 是 JavaScript 的正規表達式的類別,結果會回傳 true 或 false ,這個用法是最簡單的,接著第二個用法是透過 String.match()  來找到符合規則的字串,回傳的結果是個陣列,範例的結果有兩個,如果剛開始的規則裡沒有填寫字尾'g'的話,這裡的回傳結果就只會找一次,第三種用法是透過 String.replace() 來替代掉符合規則的文字,回傳的結果是一個字串,範例會將符合規則的字串都替換成'YYY'。


  這次初步的學習了正規表達式,正規表達式的填寫規則可以參考 [ developer.mozilla.org ] 正規表達式 裡面詳細的規則,除非很常使用正規表達式,不然應該很難把規則記下來,所以像我這種偶而用到的就用查的就可以了。


參考資料

[ developer.mozilla.org ] 正規表達式

2021年12月27日 星期一

解決 CPU 待機溫度過高的問題

 解決 CPU 待機溫度過高的問題

前言

  在先前的解決電腦總是很吵的問題 裡透過重塗散熱膏的方式解決 CPU 的風扇總是很吵的問題,但之後發現 CPU 的待機溫度還是有點高,在此把解決的過程做個紀錄。


內容

  在先前的 解決電腦總是很吵的問題 之後,透過 [ www.alcpu.com ] Core Temp 這個軟體來看 CPU 的待機溫度,結果發現溫度會達到 60 度,所以我又拆開機殼後,過沒幾分後溫度就會降到 45 度左右,看一下機殼的狀況後發現機殼風扇沒再轉,本以為是電線鬆脫,所以重插電線,但發現還是不會動,摸了一下風扇的中心部位遽然異常的燙,沒錯,兇手就是機殼風扇,後來買了個新豐善後待機溫度就降到 45 度。


  機殼風扇本以為是個不太重要的存在,但沒想到它不轉動也就算了,還持續發熱,這個發熱遽然可以讓機殼的溫度相差 15 度,真是讓我改觀了。


相關文章與資料

解決電腦總是很吵的問題

[ www.alcpu.com ] Core Temp

2021年12月20日 星期一

解決電腦總是很吵的問題

 解決電腦總是很吵的問題

前言

  最近電腦總是不定時發出很吵的聲音,本想吵一陣子忍一下就過去了,結果發現問題越來越嚴重,這裡把解決的過程做個紀錄。


內容

  在發出很吵的聲音下拆開機殼,發現很多灰塵,所以就把整個機殼就個清潔,不過清潔完後還是會發生,本想就算了忍一下就過去了,但沒想到狀況越來越嚴重,在開機後會處在打開任何影片都會讓顯卡驅動程式 crash ,在反覆多次 crash 後會開始變穩定,想說只發生在開機的那段時間,忍一下就過去了,但過了一陣子狀況更差了,偶而開始跳小藍畫面,我終於決定不忍了。


  查了一下發現最有可能的是 CPU 的散熱膏可能乾了,需要作重塗的動作,所以就去買了散熱膏與酒精,CPU的散熱片我第一次拆,要先拔除風扇電源,再來是將固定的卡栓轉開,卡栓上面有標記旋轉的方向,照著旋轉即可,拆下來後就可以看到 CPU ,接著用酒精清理 CPU 上層與散熱片的接觸面,再來就把散熱膏塗上,塗完後再把散熱片裝回去就完成重塗的動作。


  重塗完後重新開啟電腦馬上有感,開機後觀看影片不再發生顯卡驅動程式 crash 的狀況,很吵的聲音也都不見了,以前一直認為重塗散熱膏是個麻煩的事,頂多只會造成程式跑慢一點而已,但實則不然,不重塗散熱膏可能會造成作業系統的行為異常(如顯卡驅動工作不正常),這次的經驗真是讓我大大的改觀了。

2021年12月13日 星期一

在 JavaScript 檢查空字串的方法

 在 JavaScript 檢查空字串的方法

前言

  最近在 [ www.itread01.com ] 如何檢查JavaScript中的空字串? 裡發現簡短的檢查空字串的方法,在此做個紀錄。


內容

  範例如下

const ar=[ null , undefined , '' , '0' , '123' ];
for( let i=0;i<ar.length;i++ ){
  //use !!
  console.log(`[${i}]:${ !!ar[i] }`);
  //use Boolean()
  console.log(`[${i}]:${ Boolean( ar[i] ) }`);
}


方法有兩個,一個是"!!",另一個是 Boolean() ,這兩個看起來都很簡短,要注意連字串長度是0也會被判為空字串,"!!"利用的是"!"運算的特性,可以理解 null 與 undefined ,但令我意外的是字串長度是0時也會有一樣的結果,第二個方法就真的是新發現,轉成布林值得結果剛好跟空字串的結果一致,這就只能用記的了。


參考資料

[ www.itread01.com ] 如何檢查JavaScript中的空字串?

2021年12月6日 星期一

讓 JavaScript 的 function 支援不同型別的輸入

 讓 JavaScript 的 function 支援不同型別的輸入

前言

  最近需要 讓 JavaScript 的 function 支援不同型別的輸入,結果發現遽然忘了怎麼做,這次把複習的過程做個紀錄。


內容

  範例如下

class MyClass{
  constructor(){
    this._buffer = [];
  }
  addNumber(ele){
    if( typeof ele === 'number')
      this._buffer.push(ele);
    else if( Array.isArray(ele) ){
      for(let i=0;i<ele.length;i++)
        this._buffer.push( ele[i] );
    }
    else
      console.log('unsupported type!');
  }
  showContant(){
    this._buffer.forEach( function(ele){
      console.log(ele);
    });
  }
}
let a=new MyClass();
a.addNumber(1);
a.addNumber([2,3,4,5]);
a.showContant();


範例的 addNumber() 可以同時支援 number 與 Array 型別,要注意的是檢查是否是 Array 是用 Array.isArray() ,而非使用 typeof ,還有要注意這裡推入資料時使用的是傳統迴圈,而非使用 forEach() ,這是因為 this 這個變數並不能直接在匿名函式中正常動作。