繁体   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