Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 非捕获组仍捕获输入_Javascript_Regex - Fatal编程技术网

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
  • ([a-zA-Z]+)
    捕获与[1]匹配的月份名称
  • ([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
  • ([a-zA-Z]+)
    捕获与[1]匹配的月份名称
  • ([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
替换为单个空格,如注释中所述。