第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以給正則表達式一個最小值?

是否可以給正則表達式一個最小值?

寶慕林4294392 2023-03-10 13:56:57
嘿,我有一個有效的正則表達式,它確實可以完成應(yīng)有的工作。我想添加或更改的一件事是最小值應(yīng)該是00:01而不是00:00。這是我正在使用的正則表達式:let regexTime = /^$|^(([01][0-9])|(2[0-3])):[0-5][0-9]$/;基本上只允許從00:00到23:59的時間。但我需要讓它從00:01開始。這可能嗎我想我不能只保留最后一個數(shù)字必須超過 1 因為顯然00:10也應(yīng)該是可能的。感謝您的任何建議!
查看完整描述

3 回答

?
Smart貓小萌

TA貢獻1911條經(jīng)驗 獲得超7個贊

使用否定前瞻來防止00:00特定情況:

^$|^(?!00:00$)(([01][0-9])|(2[0-3])):[0-5][0-9]$

演示: https: //regex101.com/r/jSKyZN/2


查看完整回答
反對 回復 2023-03-10
?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

00:00是一個特例。在運行正則表達式之前排除它,就是這樣。


if( thingToTest === "00:00" ){

   return;

}


regexTime.test(thingToTest);


查看完整回答
反對 回復 2023-03-10
?
拉莫斯之舞

TA貢獻1820條經(jīng)驗 獲得超10個贊

正則表達式的“最小值”沒有概念,因為它只是進行模式匹配,而不是推理模式代表什么。但是,您可以只排除某種模式不被匹配。如果您不想要00:00,則可以將其從有效中刪除。

負前瞻

修改正則表達式的最簡單方法是使用語法添加否定先行(?!)。如果你不想匹配,00:00那么你可以說(?!00:00)。然后你的正則表達式需要是:

^$|^(?!00:00)(([01][0-9])|(2[0-3])):[0-5][0-9]$

參見 Regex101

const regex = /^$|^(?!00:00)(([01][0-9])|(2[0-3])):[0-5][0-9]$/;


const times = [

  "00:01",

  "00:10",

  "01:00",

  "12:01",

  "13:01",

  "23:59",

  "00:00",

  "23:60",

  "24:00",

];


for (const time of times) {

  test(time, regex);

}


function test(time, regex) {

  const result = regex.test(time);

  

  console.log(`result for [${time}] is [${result}]`);

}

不匹配的模式

您也可以制作您的模式以避免00:00在使用否定之外進行匹配。這有點乏味,因為它使模式更大。盡管如此,了解以下內(nèi)容還是很有用的:

(([01][0-9])|(2[0-3])):[0-5][0-9]將匹配任何東西,為了避免00:00你必須非常明確地指定任何東西不是匹配它的模式:

^$|^(00:0[1-9]|00:[1-5][0-9]|0[1-9]:[0-5][0-9]|(1[0-9]|2[0-3]):[0-5][0-9])$

參見 Regex101

現(xiàn)在該模式明確匹配 00:00. 如您所見,它讀起來更長更煩人。我不推薦它,但它有時很有用。

const regex = /^$|^(00:0[1-9]|00:[1-5][0-9]|0[1-9]:[0-5][0-9]|(1[0-9]|2[0-3]):[0-5][0-9])$/;


const times = [

  "00:01",

  "00:10",

  "01:00",

  "12:01",

  "13:01",

  "23:59",

  "00:00",

  "23:60",

  "24:00",

];


for (const time of times) {

  test(time, regex);

}


function test(time, regex) {

  const result = regex.test(time);

  

  console.log(`result for [${time}] is [${result}]`);

}

最好的正則表達式技巧

這是文章The Best Regex Trick中技術(shù)的名稱。它類似于使用否定前瞻,因為它允許您丟棄某些匹配項,但它僅使用 alternation 完成|。你必須先添加你不想要的模式,然后|最后使用捕獲組捕獲你想要的模式()

^$|^00:00$|^((?:[01][0-9]|2[0-3]):[0-5][0-9])$

請參閱 Regex10100:00突出顯示但未捕獲 - 請參閱右側(cè)的“匹配信息”)

我稍微修改了您的模式以刪除不需要的捕獲組,因此您最多只能獲得一次捕獲。這樣你就可以檢查它是否被提?。?/p>

const regex = /^$|^00:00$|^((?:[01][0-9]|2[0-3]):[0-5][0-9])$/;


const times = [

  "00:01",

  "00:10",

  "01:00",

  "12:01",

  "13:01",

  "23:59",

  "00:00",

  "23:60",

  "24:00",

];


for (const time of times) {

  test(time, regex);

}


function test(time, regex) {

  const match = regex.exec(time);

  const result = Boolean(match && match[1]);

//                             ^^ you can use the ?? operator for most newer environments *

  

  console.log(`result for [${time}] is [${result}]`);

}

這在這里有點矯枉過正,因為負前瞻可以做同樣的事情。我把它包括在這里主要是為了提高人們對它存在的認識。該技術(shù)在您只需要匹配某些情況而不是全部情況的其他情況下非常有用,因為它允許您“丟棄”您不喜歡的內(nèi)容并捕獲其余的內(nèi)容。這非常簡單,因為它遵循一個非常簡單的規(guī)則discard this|discard this, too|(keep this)——任何你不想要的都添加在前面,你想要的模式在最后的捕獲組中。

使用代碼

您可以使用普通代碼而不是模式匹配來拒絕數(shù)據(jù)。

const regex = /^$|^(([01][0-9])|(2[0-3])):[0-5][0-9]$/;


const times = [

  "00:01",

  "00:10",

  "01:00",

  "12:01",

  "13:01",

  "23:59",

  "00:00",

  "23:60",

  "24:00",

];


for (const time of times) {

  test(time, regex);

}


function test(time, regex) {

  let result = false;

  if (time != "00:00") {

    result = regex.test(time);

  }

  

  console.log(`result for [${time}] is [${result}]`);

}


查看完整回答
反對 回復 2023-03-10
  • 3 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號