排除组中的字符(正则表达式)

时间:2014-06-10 15:56:17

标签: javascript regex

我在Javascript中遇到正则表达式的问题(我不是正则表达式中的专业人士)。

由于我无法解释的原因,我必须以某种方式匹配文本,而且我无法更改处理结果的代码。

例如,我想匹配此文本:Mon.2014 / 01/01 在某种程度上获得这个结果:[" Mon。"," 20140101"] 这只有正则表达式,没有后期处理。

我尝试使用前瞻,不包括群组,注意到没有外观和外观,我没有设法解决它。

编辑:我提供了一个代码示例,以便更容易理解我正在做的事情。

function match(regexes, text) {
    for(var i in regexes) {
        var match = text.match(regexes[i]);
        if(match !== null) {
             return match;    
        }
    }
}
// expected result of match(regexes, "Mon.2014/01/01"): ["Mon.","20140101"]

我是如何告诉你的,我无法更改代码,因此必须使用正则表达式完成。 有没有人有一些提示? 非常感谢你!

3 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

var s = "Mon.2014/01/01";
var result = s.replace(/\//g,'').match(/((?:Mon|Tue|Wed|Thu|Fri)\.)(\d{8})/).slice(1);
// result => ["Mon.", "20140101"]

答案 1 :(得分:0)

您的“更改代码”标准非常令人困惑。您正在寻求代码帮助的网站上。但它听起来像“如何在没有代码的情况下编码X?”

帮助我们更好地了解您的情况。是因为要使用的正则表达式来自数据库吗?而且你只能修改数据库的内容?或者也许是'正则表达式'网络服务?这似乎让我们很多人感到困惑,所以请添加一些背景信息,以便我们为您提供解决方案。

答案 2 :(得分:0)

简短回答:你不能。

如果代码使用String.match方法,它只返回与正则表达式匹配的字符串部分。你不能在匹配正则表达式中嵌入字符串修改,因为你必须进行替换。

解决您的问题的两种可能的解决方案:

  1. 在运行此特定代码之前注入一些javascript,并覆盖String.prototype.match方法,将正则表达式文本拆分为2个单独的正则表达式,一个执行.replace,另一个执行.match - in这样,您可以在数据库中添加支持,以便在匹配之前更改字符串。如果未找到分隔符,则默认为原始匹配方法。

  2. 找到修改字符串的替代方法。期待[“Mon。”,“20140101”]而不是期待[“Mon。”,“2014/01/01”] ..因为那就是那里。现在,如果你需要一个正则表达式来匹配任何一种格式,那肯定是可能的,但它总会返回它匹配的实际内容。