确定字符之间的距离

时间:2012-05-16 20:48:33

标签: javascript regex

如果字符'a'和'b'在字符串中的任何位置正好相隔3个位置,则返回true。

你能指出我正确的方向,谢谢。

4 个答案:

答案 0 :(得分:1)

对于“一个字符串包含两个字符,'a'和'b',其间有3个字符”,这样就可以了:

/a[\S\s]{3}b/.test(str)

[\S\s]确实匹配所有内容,您也可以使用.。有关差异,请参阅this question

如果您想要在两个方向上匹配外观,请改用/(a.{3}b|b.{3}a)/

答案 1 :(得分:0)

我建议的内容如下:

return (Math.abs(str.indexOf('a') - str.indexOf('b')) == 3)

这是一个实施演示:

function distanceBetween(el, a, b, d) {
    if (!el || !a || !b || !d) {
        return false;
    }
    else {
        var str = el.firstChild.nodeValue;
        return (Math.abs(str.indexOf(a) - str.indexOf(b)) == d)
    }
}

var lis = document.getElementsByTagName('li'),
    a = 'a',
    b = 'b',
    d = 3;

for (var i = 0, len = lis.length; i < len; i++) {
    if (distanceBetween(lis[i], a, b, d)) {
        lis[i].style.backgroundColor = '#f90';
    }
}​

JS Fiddle demo

如上所述,在下面的评论中,如果第一个匹配的字母有多个示例,则此解决方案将失败。请参阅Jonathan Sampson提供的演示:http://jsfiddle.net/92Hxp/1/(第三个字符串acdae0rbe仍应匹配)。

答案 2 :(得分:0)

这应该这样做:

var string = 'a123b';  // String you're testing.
/a.{3}b/.test(string);

添加您可能需要的任何RegEx修饰符(即i)。

答案 3 :(得分:0)

我会使用JavaScript的原生match()方法,它不仅会告诉您是否找到了您的模式,还会返回匹配的子字符串。

var str = "afoeahooawieb00183b123Axo",
    fnd = false;

if ( fnd = str.match(/a.{3}b|b.{3}a/gi) ) {
  console.log( fnd );
}

哪个输出:

["awieb", "b123A"]