排除组中的字符(正则表达式)
Excluding characters in group (regular expressions)
我对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"]
我告诉过你,我不能改变代码,所以这只能用正则表达式来完成。有人能给点提示吗?非常感谢!
短答:你不能。
如果代码使用String。方法,它只返回与您的regexp匹配的字符串部分。你不能在match regexp中嵌入字符串修改,因为你必须做一个替换。
两个可能的解决方案来解决你的问题:
-
在运行此特定代码之前注入一些javascript,并覆盖String.prototype.match方法,将您的regexp文本拆分为2个单独的regexp,一个执行.replace,另一个执行.match——通过这种方式,您可以在数据库中添加支持,以便能够在匹配之前更改字符串。如果没有找到分隔符,则默认为原始匹配方法。
-
为修改字符串的需求找到一个替代方案。而不是期待["Mon.","20140101"],期待["Mon.","2014/01/01"]…因为这就是它的存在。现在,如果您需要一个regexp来匹配任何一种格式,这当然是可能的,但它将始终返回它匹配的实际内容。
您可以这样做:
var s = "Mon.2014/01/01";
var result = s.replace(/'//g,'').match(/((?:Mon|Tue|Wed|Thu|Fri)'.)('d{8})/).slice(1);
// result => ["Mon.", "20140101"]
您的"更改代码"标准非常令人困惑。你在一个网站上的代码帮助。但这听起来就像"没有代码我怎么写X ?"
帮助我们更好地了解你在这里的情况。是因为要使用的正则表达式来自数据库吗?您只能修改数据库的内容吗?或者是一个"正则表达式"web服务?这似乎让我们很多人感到困惑,所以请添加一些背景,以便我们可以帮助您解决这个问题。
- 不同浏览器中的空白字符正则表达式行为
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 用于匹配不带字符的单词的正则表达式
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 正则表达式搜索一个空格,后跟一个字符
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- javascript正则表达式来识别所有特殊字符
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 如何使用正则表达式限制字符串的第一个字符
- 为什么以下正则表达式不删除 ## 字符
- 模仿负查找以匹配JavaScript正则表达式中没有紧跟特定字符的模式
- 匹配某个字符后所有文本的正则表达式是什么
- Javascript中的正则表达式,用于只有数字的字符串,并且不应在除数字以外的任何位置包含任何字符
- Javascript 正则表达式字符范围 A-z 匹配插入符号 (“^”)
- 为什么在正则表达式字符可选时找不到匹配项
- 我什么时候需要转义正则表达式字符集中的字符(在 [] 内)
- Javascript正则表达式字符匹配
- 字符串用正则表达式替换正则表达式字符类
- 正则表达式字符识别