簡體   English   中英

JS:字符串的正則表達式

[英]JS: Regular expression for string

我有js和像這樣的不同字符串:

Tue Aug 11 2015 between  4:00 PM and  5:00 PM

單詞betweenand沒有改變,但有時我能得到這個字符串不同量的單詞之間有空格

Tue Aug 11 2015 between   4:00 PM and   5:00 PM  (3 spaces)

要么

Tue Aug 11 2015 between 4:00 PM and 5:00 PM (1 spaces)

是否可以為此字符串創建正則表達式?

  string re1="((?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday|Tues|Thur|Thurs|Sun|Mon|Tue|Wed|Thu|Fri|Sat))";  // Day Of Week 1
  string re2="(\\s+)";  // White Space 1
  string re3="((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))"; // Month 1
  string re4="(\\s+)";  // White Space 2
  string re5="((?:(?:[0-2]?\\d{1})|(?:[3][01]{1})))(?![\\d])";  // Day 1
  string re6="(\\s+)";  // White Space 3
  string re7="((?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d])";    // Year 1
  string re8="(\\s+)";  // White Space 4
  string re9="(\"between\")";   // Double Quote String 1
  string re10="(\\s+)"; // White Space 5
  string re11="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\\s?(?:am|AM|pm|PM))?)"; // HourMinuteSec 1
  string re12="(\\s+)"; // White Space 6
  string re13="(\"and\")";  // Double Quote String 2
  string re14="(\\s+)"; // White Space 7
  string re15="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\\s?(?:am|AM|pm|PM))?)"; // HourMinuteSec 2

如何簡化此行的正則表達式?

嘗試這個:

string.replace(/\s+/g,' ').trim();

它將刪除您所有的多余空間,每次僅保留1個空間。 因此,如果您有3個空格,如您所說,它將轉換為1個空格

這是我嘗試重用您的代碼的嘗試:

 var re1="((?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday|Tues|Thur|Thurs|Sun|Mon|Tue|Wed|Thu|Fri|Sat))"; // Day Of Week 1 var re2="\\\\s+"; // White Space 1 var re3="((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))"; // Month 1 var re5="((?:(?:[0-2]?\\\\d)|(?:3[01])))(?!\\\\d)"; // Day 1 var re7="(\\\\b(?:1\\\\d{3}|2\\\\d{3})\\\\b)"; // Year 1 var re11="((?:[0-1][0-9]|2[0-3]|[0-9]):[0-5][0-9](?::[0-5][0-9])?(?:\\\\s*(?:am|AM|pm|PM))?)"; // HourMinuteSec var reDay = "\\\\b((?:0?\\\\d|[12]\\\\d|3[01]))\\\\b"; var s = "Tue Aug 11 2015 between 4:00 PM and 5:00 PM"; var rx = RegExp(re1 + re2 + re3 + re2 + reDay + re2 + re7 + re2 + "between" + re2 + re11 + re2 + "and" + re2 + re11, 'i'); if ((m = rx.exec(s)) !== null) { document.write("Day of week: " + m[1] + "<br/>"); document.write("Month: " + m[2] + "<br/>"); document.write("Day: " + m[3] + "<br/>"); document.write("Year: " + m[4] + "<br/>"); document.write("From: " + m[5] + "<br/>"); document.write("Till: " + m[6]); } 

請注意,我沒有捕獲空格(刪除了括號),添加了一個reDay幾天,僅用\\b\\d{1,2}\\b捕獲了整個單詞的兩位數,並且我已經獲取了一些正則表達式(已刪除)並通過更改\\s?固定時間正則表達式\\s? \\s* 看來這是主要問題,因為? 代表0或1次出現*表示0次或多次出現

暫無
暫無

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

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