有关如何使用正则表达式根据ISO ISO861从YYYY-MM-DD中的字符串末尾提取日期的任何建议,并将其移动到字符串的前面并用逗号替换前面字符串中的所有连字符?
EG
“芬兰 - 坦佩雷,2019-03-23” - >“2019-03-23,欧盟,芬兰,坦佩雷”
“US - Virginia - Richmond,2011-02-29” - >“2011-02-29,US,Virginia,Richmond”
只需在()中创建三组搜索包装,然后在替换函数中使用'$ 3 $ 2 $ 1'语法来更改顺序。
第二种情况的天真实施:
const regex = /(US).*- ([a-zA-Z].*) - ([a-zA-Z]*).*(\d{4}-\d{2}-\d{2})/g
const str = 'US - Virgina - Richmond, 2011-02-29';
console.log(str.replace(regex, '$4, $1, $2, $3'))
// 2011-02-29, US, Virgina, Richmond
你可以找到组here的好解释
您没有指定哪种编程语言。在线有许多正则表达式构建器。我链接了一个可能的解决方案,可在regex101.com下面进行测试。
((^(?'COUNTRY'[A-Z]{2})) - )?((?'STATE'([A-Z][a-z]{2,} ?)+) - )((?'CITY'([A-Z][a-z]{2,} ?.*)),).*(?'DATE'(?'YEAR'[0-9]{4})(-(?'MONTH'[0-9]{2})(-(?'DAY'[0-9]{2})))$)
这提供了可以在代码中使用的命名分组。由于国家/地区未出现在两个示例中,因此您可以通过所选的编程语言提供默认值(例如EU)。