RegExp代码,用于在字符串中查找等间距字符

时间:2013-01-23 16:40:52

标签: javascript regex

我将在JavaScript中实现RegExp。

我认为解释这个问题的最好方法是举个例子。如果搜索字符串是

'abc'

和干草堆是

'auaisdgbbhbcsccddciubbffs'

模式需要点击:

'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'

并返回这些字符的位置......

Regex甚至可以做这样的事情吗?

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,这样的正则表达式可能有用:

"(a).{6}(b).{6}(c).{6}.*"

您可能希望加入第1组,第2组和第3组。

由于您没有指定语言,请考虑使用上面给出的字符串的python中的以下示例:

>>> q = re.compile(r"(a).{6}(b).{6}(c)")
>>> s1 = 'auaisdgbbhbcsccddciubbffs'
>>> s2 = 'auaisdgbbhbcsccddciubbffs'
>>> res1 = q.findall(s1)
>>> res2 = q.findall(s2)
>>> print res1, res2
[('a', 'b', 'c')] [('a', 'b', 'c')]
>>> for r in res1:
    print ''.join(r)

abc
>>> for r2 in res2:
    print ''.join(r)

abc

答案 1 :(得分:1)

鉴于我们不知道您正在使用的编程语言,此时无法提供明确的答案。

那就是说,我不知道任何允许这种匹配的正则表达式构造。

如果我理解正确,你想找一个'a',例如,后面跟着'b'六个字符。然后,因为“b”在'a'之后出现了六个字符,你想在'b'之后找到'c'六个字符。基本上,您需要backreferences,但您只想匹配反向引用的长度而不是实际文本。我不认为正则表达式可以做到这一点。

有些正则表达式实现可能有一个不常见的结构允许这样做,所以知道你的平台会有所帮助。

<强>更新

Javascript有least powerful个正则表达式实现之一。我认为你不能用纯正则表达式做到这一点。您需要编写一些额外的代码(我诚实地为您的简单示例推荐“仅代码”方法)。

答案 2 :(得分:0)

在perl中,您可以使用$ + [1]等返回匹配位置

e.g。

$x=qqqafkewibslspcfjfjfj;
$x=~/(a).*(b).*(c)/;
print 'a was at: ' . $+[1] . ' b was at: ' . $+[2] . ' c was at:' .  $+[3];"

告诉我:

a was at: 4 b was at: 10 c was at:15