簡體   English   中英

正則表達式如何匹配精確的字符串模式

[英]Regex how to match exact string pattern

我有一個像這樣的長字符串:

['2021_04_27__21_52_09', '2021_04_27__21_52_13', '2021_04_27__21_52_16']

我正在嘗試使用string.split方法將字符串轉換為數組。 要正確拆分,我必須刪除:

  1. [
  2. ]
  3. '
  4. (逗號)
  5. (空間)

我試過使用正則表達式[&#39$;?,? ] [&#39$;?,? ]但這會刪除所有 3 和 9(例如 2021_04_27__21_52_13 中的 3)。 我只想在序列&#39$;中刪除 3s 和 9s .

什么是正確的正則表達式?

您可以使用

(?:'|[\][,\s])+

請參閱正則表達式演示 詳情

  • (?: - 非捕獲組匹配
    • ' - 一個' substring
    • | - 或者
    • [\][,\s] - a ] , [ , 逗號或空格
  • )+ - 一次或多次。

請參閱 JavaScript 演示:

 const str = "['2021_04_27__21_52_09', '2021_04_27__21_52_13', '2021_04_27__21_52_16']"; console.log(str.split(/(?:'|[\][,\s])+/).filter(Boolean)) // => ["2021_04_27__21_52_09", "2021_04_27__21_52_13", "2021_04_27__21_52_16"]

請注意, .filter(Boolean)從結果數組中刪除空元素。

我會傾向於使用match()在這里執行正則表達式查找所有方法,而不是嘗試拆分:

 var input = "['2021_04_27__21_52_09', '2021_04_27__21_52_13', '2021_04_27__21_52_16']"; var matches = input.match(/\d{4}_\d{2}_\d{2}__\d{2}_\d{2}_\d{2}/g); console.log(matches);

一種方法是分多個步驟清理字符,然后用;分割。 .

 const str = "['2021_04_27__21_52_09', '2021_04_27__21_52_13', '2021_04_27__21_52_16']"; const clean = str.replace(/[\[\]\s\,]/g,"") // removes [] space and, .replace(/&#39/g,"") // removes &#39.split(/;/) // splits on; .filter(e => e.length > 0); // removes any empty strings console.log(clean);

要將字符串轉換為數組,我將替換' - 這是一個編碼的單引號,char(39) - 帶有雙引號字符。 根據您提供的示例,這為我們提供了有效的 JSON,然后我們可以使用JSON.parse() ,如下所示:

 const str = "['2021_04_27__21_52_09', '2021_04_27__21_52_13', '2021_04_27__21_52_16']"; const str2 = str.replace(/'/g, '"') const arr = JSON.parse(str2); console.log(arr);

這個想法是使正則表達式盡可能簡單,而不必提供字符串中可能包含的其他內容。 它所做的只是“使引號可用”。

然后我們使用最簡單的方法解析結果。

暫無
暫無

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

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