如果字符 'a' 和 'b' 在字符串中的任何位置被恰好 3 个位置分隔,则返回 true。
你能指出我正确的方向吗,谢谢。
对于“一个字符串包含两个字符,' a
'和' b
',它们之间有3个字符”,这样可以做到:
/a[\S\s]{3}b/.test(str)
where[\S\s]
真正匹配所有内容,您也可以使用.
。看到这个问题的区别。
如果您想在两个方向上匹配外观,您将使用/(a.{3}b|b.{3}a)/
。
我会使用 JavaScript 的本地match()
方法,它不仅会告诉您是否找到了模式,还会返回匹配的子字符串。
var str = "afoeahooawieb00183b123Axo",
fnd = false;
if ( fnd = str.match(/a.{3}b|b.{3}a/gi) ) {
console.log( fnd );
}
哪个输出:
["awieb", "b123A"]
我建议以下内容:
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
, 应该仍然匹配)。
这应该这样做:
var string = 'a123b'; // String you're testing.
/a.{3}b/.test(string);
添加您可能需要的任何 RegEx 修饰符(即i
)。