这是我的RegExp:
String deviceName = android.os.Build.MODEL;
String deviceMan = android.os.Build.MANUFACTURER;
https://regex101.com/r/rET1Le/1
我已在网址中排除了网址,因此我在此网址中只有一个问题:[{3}}。 有人知道如何修改我的RegExp以避免这个点吗?
答案 0 :(得分:0)
如果你做对了,违规案例就是你的样本中第二个匹配的案例。在比赛中。使用PCRE正则表达式可以使用类似于后面的断言(?<!\.)
轻松解决这个问题:
((\w*?)((:\/\/)|www|\w\.{1}\w{2,})[^"<\s]+(?<!\.))(?![^<>]*>|[^"]*?<\/a)
不幸的是,这在(当前)JavaScript的正则表达式引擎中不起作用。作为替代方案,我们可以使用(?:(?!avoid).)+
模式排除在内部所有内容之前添加点 - 但模式[^"<\s]+
;但是,由于必须使用按长度(长到短)排序的多个轮换来解决.
之前的最终<|"|\s
的情况,因此它会变得有点混乱:
((\w*?)((:\/\/)|www|\w\.{1}\w{2,})(:?(?!\.\s|\s|\."|"\.<|<).)+)(?![^<>]*>|[^"]*?<\/a)
const regex = /((\w*?)((:\/\/)|www|\w\.{1}\w{2,})(:?(?!\.\s|\s|\."|"\.<|<).)+)(?![^<>]*>|[^"]*?<\/a)/g;
const str = `djfhjkshd fjkshkdjfhsjkdhfjk jdsfh ksjdfksd fkdsf dkfh kjh<br>You can open your link here: https://testask.com/item/45e20490-2b86-4b6a-8772-5ed96f64de52. dsjfklj skldjfklsdjfkl. dsjfjshdfjk skdhfshdfj skdhfjshfjsahfjhasjfh shfk.<br>sdkfhklsdjf kljsdklf kdsljfkljafkljkl .`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(m[0]);
// The result can be accessed through the `m`-variable.
//m.forEach(match => {
// console.log(`Found match: ${match}`);
//});
}
&#13;
然而,最简单的解决方案是简单地修剪尾随点。