簡體   English   中英

Javascript 正則表達式測試方法奇怪的行為

[英]Javascript Regexp test method weird behaviour

我一直在嘗試基於正則表達式評估字符串,但是我注意到一個奇怪的行為,並且當我多次使用正則表達式進行測試時。 測試方法在真假之間交替。 檢查這個codepen--> http://codepen.io/gpincheiraa/pen/BoXrEz?editors=001

var emailRegex = /^([a-zA-Z0-9_\.\-]){0,100}\@(([a-zA-Z0-9\-]){0,100}\.)+([a-zA-Z0-9]{2,4})+$/,
  phoneChileanRegex = /^\+56\S*\s*9\S*\s*\d{8}(?!\@\w+)/g,
   number = "+56982249953";

if(!number.match(phoneChileanRegex)  && !number.match(emailRegex) ) {
  console.log("it's not a phone number or email address");
}

//Weird Behaviour
console.log(phoneChileanRegex.test(number)); --> true
console.log(phoneChileanRegex.test(number)); --> false

MDN文檔中

exec() (或與其結合使用)一樣,在同一全局正則表達式實例上多次調用的test()將前進到先前的匹配。

因此,第二次調用該方法時,它將在第一個匹配項之后(即+56982249953之后) +56982249953匹配+56982249953 之所以沒有匹配,是因為該模式已錨定到字符串( ^ )的開頭(並且沒有剩余的字符),因此它返回false

為此,您必須刪除g修飾符。

這是因為test方法與許多RegExp方法一樣,在與g標志一起使用時會嘗試在同一字符串中查找多個匹配項。 為此,它在RegExp的lastIndex屬性中跟蹤應從中搜索的位置。 如果您不需要查找多個匹配項,則不必放置g標志。 而且,如果您要使用它,只需記住要測試新字符串時將regex.lastIndex設置為0。

閱讀有關MDN的lastIndex更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM