Javascript 非捕获组仍捕获输入
我有一个日期格式,可以按以下格式输入:Javascript 非捕获组仍捕获输入,javascript,regex,Javascript,Regex,我有一个日期格式,可以按以下格式输入: December, 13, 2016 December , 13 , 2016 December ,13 , 2016 . . . 因此,我试图匹配并捕获所有这些输入事件,最终得到如下结果: December 13 2016 str.match([a-zA-Z]+(?: |,)*[0-9]{1,2}(?: |,)*[0-9]+$) 我的正则表达式如下所示: December 13 2016 str.match([a-zA-Z]+
December, 13, 2016
December , 13 , 2016
December ,13 , 2016
.
.
.
因此,我试图匹配并捕获所有这些输入事件,最终得到如下结果:
December 13 2016
str.match([a-zA-Z]+(?: |,)*[0-9]{1,2}(?: |,)*[0-9]+$)
我的正则表达式如下所示:
December 13 2016
str.match([a-zA-Z]+(?: |,)*[0-9]{1,2}(?: |,)*[0-9]+$)
相信我,在发布问题之前,我曾尝试在网上搜索解决方案,但没有成功。有什么建议可以解决这个问题吗?您必须捕获要提取的部分。比如说,
matches = "December ,13 , 2016".match(/([a-zA-Z]+)[ ,]*([0-9]{1,2})[ ,]*([0-9]+)$/)
console.log(matches[1] + ' ' + matches[2] + ' ' + matches[3])
// December 13 2016
捕获与[1]匹配的月份名称([a-zA-Z]+)
捕获日期([0-9]{1,2})
捕获年份([0-9]+)
- 与
相同,但没有使用字符类的组(?:|,)
matches = "December ,13 , 2016".match(/([a-zA-Z]+)[ ,]*([0-9]{1,2})[ ,]*([0-9]+)$/)
console.log(matches[1] + ' ' + matches[2] + ' ' + matches[3])
// December 13 2016
捕获与[1]匹配的月份名称([a-zA-Z]+)
捕获日期([0-9]{1,2})
捕获年份([0-9]+)
- 与
相同,但没有使用字符类的组(?:|,)
“2016年12月13日”
转换为字符串“2016年12月13日”
?为什么不干脆用.replace(/[\s,]+/g,”)
?如果你只想替换所有非字母/数字,你可以使用s.trim().replace(/\W+/g,”)
(或者s.trim().replace(/[^a-z0-9]+/gi gi)”)
。@DenysSéguret。我忘记了/g
选项。我将检查是否应使用您的解决方案或@nu11p01n73R。谢谢。是否要将字符串“2016年12月13日”
转换为字符串“2016年12月13日”
?为什么不干脆用.replace(/[\s,]+/g,”)
?如果你只想替换所有非字母/数字,你可以使用s.trim().replace(/\W+/g,”)
(或者s.trim().replace(/[^a-z0-9]+/gi gi)”)
。@DenysSéguret。我忘记了/g
选项。我将检查是否应使用您的解决方案或@nu11p01n73R。谢谢。我想这解决了我所有的问题@DenysSéguret也有一个很好的建议。我会看看哪个解决方案最适合我。谢谢你今天早上解开了我的心结。@Luminance不客气。:)如果您确定字符串只包含月份名称日期和年份,那么您可以将注释中提到的空格\s
和,
替换为单个空格。我想这解决了我所有的问题@DenysSéguret也有一个很好的建议。我会看看哪个解决方案最适合我。谢谢你今天早上解开了我的心结。@Luminance不客气。:)如果您确定字符串仅包含月份名称日期和年份,则可以将空格\s
和,
替换为单个空格,如注释中所述。