我有一个正则表达式,但我希望匹配'android'而不是'mobile'
(?=.*android)(?!.*mobile)
但是如果字符串是这样的模式 - “my-custom-android”,我不希望它与我的正则表达式有任何匹配。
For example, "my-custom-android some thing else" should not have a match with the regex.
**我正在寻找Javascript支持的正则表达式,JS **不支持当前的lookbehind
答案 0 :(得分:1)
您可以在没有后视的情况下执行检查:
var strs =[ "my-custom-android some thing else", "my-custom-android mobile some thing else android", "mobile android", "android mobile", "another android story" ];
var patt = /(my-custom-)?android(?!.*mobile)/i;
for (var str of strs) {
var res = str.match(patt);
if(res && res[1] === undefined)
{ // do something
console.log(str, "=> MATCHED");
} else { // DON'T do anything
console.log(str, "=> NOT MATCHED");
}
}
/(my-custom-)?android(?!.*mobile)/i
模式搜索任何my-custom-
(1或0次重复),然后搜索android
,此子字符串后面的任何地方都没有mobile
。 my-custom-
部分被捕获到第1组,并且可以在找到匹配后进行评估。如果此组未定义,则表示在android
之前文本丢失且它是有效匹配。否则,我们应该在那场比赛中失败。
答案 1 :(得分:-1)
使用负面的lookbehind尝试以下模式:
(?<!my-custom-)android(?!.*mobile)