奇怪的正则表达式问题

时间:2012-10-04 20:48:13

标签: javascript regex

我正在使用的正则表达式返回太多文本。表达式应该从文本中删除名称和日期。

var sCurrentText = "(26 JAN 2011) - ILewis Provided excellent translation.";
var sRegxDate    = "\([0-9]{2}[\\\.\/\-, ](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\\\.\/\-, ][0-9]{4}\)[, \-]{0,3}[A-z]+ ?\-?\:? ?";
var DatePattern  = new RegExp(sRegxDate, "i");
var sDate        = DatePattern.exec(sCurrentText);
alert(sDate);

我期待:

(26 JAN 2011) - ILewis

但弹出窗口说:

(26 JAN 2011) - ILewis,JAN

其他恼人的问题:

  1. 我无法在regexpal中模仿这个问题。 http://regexpal.com/
  2. 2

    alert(sDate[0]); 
    

    返回:

    (26 JAN 2011) - ILewis
    

    但是

    oTextbox.value = sDate[0];
    

    会产生一个空文本框。令人沮丧。

    我做错了什么?

2 个答案:

答案 0 :(得分:1)

你警告sDate认为它是一个字符串,而实际上它是一个数组。逗号不在匹配中,它是一个分隔符。

第一个元素是:

(26 JAN 2011) - ILewis

第二个是:

JAN

这是因为您将月份括在括号中。它是一个捕获组,exec返回捕获组作为结果的一部分。

你想要

sDate[0]

如果你从这里得到一个空文本框,那么在正则表达式之外还有一些其他问题。

您的正则表达式中还有一些未正确转义的\。因为它存在,它在IE中根本不起作用。只要您有\\

,就需要\

编辑:这个小提琴显示了行动中的代码。它有效。

http://jsfiddle.net/5azr9/

答案 1 :(得分:0)

也许你可以使用更简单(更宽容)的正则表达式,这一切都取决于你的需求,但试试这个:

/\(\d{2}.\w{3}.\d{4}\)[\s\-.,]{0,3}\b\w+\b/