[英]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
方法將字符串轉換為數組。 要正確拆分,我必須刪除:
[
]
'
我試過使用正則表達式['$;?,? ]
['$;?,? ]
但這會刪除所有 3 和 9(例如 2021_04_27__21_52_13 中的 3)。 我只想在序列'$;
中刪除 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(/'/g,"") // removes '.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.