如何用正则表达式将日期移到字符串的开头?

时间:2019-03-23 20:25:50

标签: regex regex-lookarounds

关于如何使用正则表达式按照ISO ISO861从YYYY-MM-DD中的字符串末尾提取日期并将其移至字符串开头并将前一个字符串中的所有连字符替换为逗号的任何建议?

例如

“芬兰-坦佩雷,2019-03-23”->“ 2019-03-23,欧盟,芬兰,坦佩雷”

“美国-维珍娜-里士满,2011-02-29”->“ 2011-02-29,美国维珍娜,里士满”

2 个答案:

答案 0 :(得分:0)

只需在()中创建三组搜索包装器,然后在replace函数中使用'$ 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

的很好的解释

答案 1 :(得分:0)

您没有指定哪种编程语言。在线上有许多正则表达式生成器。我链接了一个可能的解决方案,可以在下面的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})))$)

这提供了可以在代码中使用的命名分组。由于在两个示例中均未显示国家/地区,因此您可以通过选择的编程语言提供默认值(例如,欧盟)。

https://regex101.com/r/ls7Eg6/2