我正在尝试匹配星号字符*
,但仅在它出现一次时才匹配。
我努力了:
/\*(?!\*)/g
它会提前检查下一个字符是否不是星号。这让我很接近,但我需要确保前一个字符也不是星号。不幸的是,javascript 不支持负面的后视。
澄清:
This is an ex*am*ple
应该匹配每个星号,但是:
This is an ex**am**ple
根本不应该返回任何匹配项。
提前致谢
我正在尝试匹配星号字符*
,但仅在它出现一次时才匹配。
我努力了:
/\*(?!\*)/g
它会提前检查下一个字符是否不是星号。这让我很接近,但我需要确保前一个字符也不是星号。不幸的是,javascript 不支持负面的后视。
澄清:
This is an ex*am*ple
应该匹配每个星号,但是:
This is an ex**am**ple
根本不应该返回任何匹配项。
提前致谢
var r = /(^|[^*])(\*)([^*]|$)/;
r.test('This is an ex*am*ple'); // true
r.test('This is an ex**am**ple'); // false
r.test('*This is an example'); // true
r.test('This is an example*'); // true
r.test('*'); // true
r.test('**'); // false
在所有情况下,匹配的星号都在捕获组 2 中。
对于完整的解决方案,不使用正则表达式:
function findAllSingleChar(str, chr) {
var matches = [], ii;
for (ii = 0; ii < str.length; ii++) {
if (str[ii-1] !== chr && str[ii] === chr && str[ii+1] !== chr) {
matches.push(ii);
}
}
return matches.length ? matches : false;
}
findAllSingleChar('This is an ex*am*ple', '*'); // [13, 16]
findAllSingleChar('This is an ex**am**ple', '*'); // false
findAllSingleChar('*This is an example', '*'); // [0]
findAllSingleChar('This is an example*', '*'); // [18]
findAllSingleChar('*', '*'); // [0]
findAllSingleChar('**', '*'); // false