我有一个像这样的长字符串:
['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。
正确的正则表达式是什么?
答案 0 :(得分:1)
你可以使用
(?:'|[\][,\s])+
参见regex demo。 详情:
(?:
- 非捕获组匹配
'
- '
子字符串|
- 或[\][,\s]
- ]
、[
、逗号或空格)+
- 一次或多次。查看 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)
从结果数组中删除空元素。
答案 1 :(得分:0)
我倾向于在这里使用 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);
答案 2 :(得分:0)
一种方法是分多个步骤清理字符,然后按 ;
拆分。
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);
答案 3 :(得分:0)
要将字符串转换为数组,我会将 '
- 它是一个编码的单引号,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);
这个想法是让正则表达式尽可能简单,而不必为字符串中的其他内容做准备。它所做的只是“使引号可用”。
然后我们使用最简单的方法解析结果。