[英]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.