如果字符'a'和'b'在字符串中的任何位置正好相隔3个位置,则返回true。
你能指出我正确的方向,谢谢。
答案 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';
}
}
如上所述,在下面的评论中,如果第一个匹配的字母有多个示例,则此解决方案将失败。请参阅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"]