正则表达式不能正确评估带有短划线字符

时间:2019-01-23 00:49:46

标签: javascript regex google-chrome

我目前正在创建一个正则表达式,用于解析以下格式: “ 2009年1月20日至2017年1月20日”

但是,尽管在RegEx101上正确解析了值,但是在javascript中却无法正确解析。

var text = "January 20, 2009 – January 20, 2017";
alert(text);
var replacedText = text.replace(/(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d[ ][\p{Pd}][ ](January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d/gi,'Replace Me');

alert(replacedText);

我对自己的错误感到好奇。在评估破折号时出现了我的问题。对于不想运行我的代码的人,这里是RegEx

/((1月| 2月| 3月| 4月| 5月| 6月| 7月| 8月| 9月| 10月| 11月| 12月| 1月| 2月| 3月| 4月| 5月| 6月| 7月| 8月| 9月| 10月| 11月) | Dec)[,] [] \ d \ d \ d \ d [] [\ p {Pd}] [,] [] \ d \ d \ d \ d / gi

[\ p {Pd}]是导致RegEx混乱的代码(我相信)。

我应该注意,我目前正在Chrome扩展程序的内容javascript上测试此代码。此外,当以上代码作为Chrome扩展程序运行时,警告框将显示以下内容:

“ 2009年1月20日-2017年1月20日”

编辑:我修改了RegEx,使其在表达式中包含en和em破折号unicode字符,但代码仍无法正常工作。这是我想出的新解决方案:

var text = "January 20, 2009 – January 20, 2017";
alert(text)
var replacedText = text.replace(/(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d[ ][\u2013\u2014\-][ ](January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d/gi,'Replace Me');
alert(replacedText);

该部分现在为[\ u2013 \ u2014-]

编辑2 :新代码似乎在运行代码段框中有效,但在chrome内容脚本中无效。

0 个答案:

没有答案