正则表达式搜索电话但跳过网址
Regex search Telefon but skip urls
我有一个正则表达式可以完美地处理我想要得到的数字,但问题是 URLs 也能得到它们,我该如何删除它们?
如果没有空格space、换行之类的就跳过?
谢谢!!
我当前的正则表达式是:
/((?(0{1,2}|+)\d{1,2})?)?(([ -]*\d+){8,20})+/gm
https://regex101.com/r/yzAScj/1
我做的修改不起作用:
/\s{1}((?(0{1,2}|+)\d{1,2})?)?(([ -]*\d+){8,20})+\s{0,1}/gm
https://regex101.com/r/yzAScj/2
测试文本:
https://asd.com/20441235534-aaaaaaaaaaa-
202460676
aasdasd 202460676
https://asd.com/20441235534
202460676-
10 text
1234 text
text 123
00491234567890
+491234567890
0123-4567890
0123 4567 789
0123 456 7890
0123 45 67 789
+490123 4567 789
+490123 456 7890
+49 123 45 67 789
123 4567 789
123 456 7890
123 45 67 789
+49 1234567890
+491234567890
0049 1234567890
0049 1234 567 890
(0049)1234567890
(+49)1234567890
(0049) 1234567890
(+49) 1234567890
text text (0049) 1234567890 text text
text text (+49) 1234567890 text text
使 phone 数字具有 link "tel:" 可以点击它们。
你不应该选择 URL 作为 phone。
JS代码(带jquery):
函数 searchAndReplacePhones(){
var regex = /(\(?(0{1,2}|\+)\d{1,2}\)?)?(([ -]*\d+){8,20})+/gm;
//Beschreibung
$(".my_text").html($(".my_text").html().replace(regex, " <a href=\"tel:$&\">$&</a> "));
}
显示了 (*SKIP)(*F)
技巧的使用,将 https?:\/\/\S*(*SKIP)(*F)|
添加到您的表达式中:
https?:\/\/\S*(*SKIP)(*F)|(\(?(0{1,2}|\+)\d{1,2}\)?)?(([ -]*\d+){8,20})+
使用 https?:\/\/\S*(*SKIP)(*F)|
,您可以跳过 URL,匹配其他任何地方。
您可以使用匹配 URL(例如 https?://\S*
)或匹配 捕获 phone 数字的正则表达式:
var regex = /https?:\/\/\S*|((?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?\d(?:[ -]*\d){7,19})/gi;
然后,当你在.replace
方法中使用它时,你需要使用一个回调方法,在那里你传递正则表达式匹配并分析匹配的结构:如果第1组匹配,替换它,否则,放回匹配值。
请参阅下面的 regex demo 和 JS 演示:
var text = "\n\nhttps://asd.com/20441235534-aaaaaaaaaaa-\n\n202460676\n\naasdasd 202460676\n\nhttps://asd.com/20441235534\n\n\n202460676-\n\n\n\n10 text\n1234 text\ntext 123\n\n00491234567890\n+491234567890\n\n0123-4567890\n\n0123 4567 789\n0123 456 7890\n0123 45 67 789\n\n+490123 4567 789\n+490123 456 7890\n+49 123 45 67 789\n\n123 4567 789\n123 456 7890\n123 45 67 789\n\n\n+49 1234567890\n+491234567890\n\n0049 1234567890\n0049 1234 567 890\n\n(0049)1234567890\n(+49)1234567890\n\n(0049) 1234567890\n(+49) 1234567890\n\n\n\ntext text (0049) 1234567890 text text\ntext text (+49) 1234567890 text text";
var regex = /https?:\/\/\S*|((?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?\d(?:[ -]*\d){7,19})/gi;
//https://regex101.com/r/0LxWTv/5
document.body.innerHTML = "<pre>" + text.replace(regex, function([=11=],) {
return ? '<a href="tel:' + + '">' + + '</a>' : [=11=];
} ) + "</pre>";
注意我稍微修改了模式:
(?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?
- 可选的非捕获组匹配 1 次或 0 次出现
\(?
(?:0{1,2}|\+)
- 一个或两个零或 +
\d{1,2}
- 一位或两位数
\)?
- 一个可选的 )
[ -]*
- 0 个或更多空格或连字符
\d
- 一个数字
(?:[ -]*\d){7,19}
- 用 0 个或多个空格或连字符分隔的七到十九位数字。
我有一个正则表达式可以完美地处理我想要得到的数字,但问题是 URLs 也能得到它们,我该如何删除它们?
如果没有空格space、换行之类的就跳过?
谢谢!!
我当前的正则表达式是:
/((?(0{1,2}|+)\d{1,2})?)?(([ -]*\d+){8,20})+/gm
https://regex101.com/r/yzAScj/1
我做的修改不起作用:
/\s{1}((?(0{1,2}|+)\d{1,2})?)?(([ -]*\d+){8,20})+\s{0,1}/gm
https://regex101.com/r/yzAScj/2
测试文本:
https://asd.com/20441235534-aaaaaaaaaaa-
202460676
aasdasd 202460676
https://asd.com/20441235534
202460676-
10 text
1234 text
text 123
00491234567890
+491234567890
0123-4567890
0123 4567 789
0123 456 7890
0123 45 67 789
+490123 4567 789
+490123 456 7890
+49 123 45 67 789
123 4567 789
123 456 7890
123 45 67 789
+49 1234567890
+491234567890
0049 1234567890
0049 1234 567 890
(0049)1234567890
(+49)1234567890
(0049) 1234567890
(+49) 1234567890
text text (0049) 1234567890 text text
text text (+49) 1234567890 text text
使 phone 数字具有 link "tel:" 可以点击它们。
你不应该选择 URL 作为 phone。
JS代码(带jquery):
函数 searchAndReplacePhones(){
var regex = /(\(?(0{1,2}|\+)\d{1,2}\)?)?(([ -]*\d+){8,20})+/gm;
//Beschreibung
$(".my_text").html($(".my_text").html().replace(regex, " <a href=\"tel:$&\">$&</a> "));
}
(*SKIP)(*F)
技巧的使用,将 https?:\/\/\S*(*SKIP)(*F)|
添加到您的表达式中:
https?:\/\/\S*(*SKIP)(*F)|(\(?(0{1,2}|\+)\d{1,2}\)?)?(([ -]*\d+){8,20})+
使用 https?:\/\/\S*(*SKIP)(*F)|
,您可以跳过 URL,匹配其他任何地方。
您可以使用匹配 URL(例如 https?://\S*
)或匹配 捕获 phone 数字的正则表达式:
var regex = /https?:\/\/\S*|((?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?\d(?:[ -]*\d){7,19})/gi;
然后,当你在.replace
方法中使用它时,你需要使用一个回调方法,在那里你传递正则表达式匹配并分析匹配的结构:如果第1组匹配,替换它,否则,放回匹配值。
请参阅下面的 regex demo 和 JS 演示:
var text = "\n\nhttps://asd.com/20441235534-aaaaaaaaaaa-\n\n202460676\n\naasdasd 202460676\n\nhttps://asd.com/20441235534\n\n\n202460676-\n\n\n\n10 text\n1234 text\ntext 123\n\n00491234567890\n+491234567890\n\n0123-4567890\n\n0123 4567 789\n0123 456 7890\n0123 45 67 789\n\n+490123 4567 789\n+490123 456 7890\n+49 123 45 67 789\n\n123 4567 789\n123 456 7890\n123 45 67 789\n\n\n+49 1234567890\n+491234567890\n\n0049 1234567890\n0049 1234 567 890\n\n(0049)1234567890\n(+49)1234567890\n\n(0049) 1234567890\n(+49) 1234567890\n\n\n\ntext text (0049) 1234567890 text text\ntext text (+49) 1234567890 text text";
var regex = /https?:\/\/\S*|((?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?\d(?:[ -]*\d){7,19})/gi;
//https://regex101.com/r/0LxWTv/5
document.body.innerHTML = "<pre>" + text.replace(regex, function([=11=],) {
return ? '<a href="tel:' + + '">' + + '</a>' : [=11=];
} ) + "</pre>";
注意我稍微修改了模式:
(?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?
- 可选的非捕获组匹配 1 次或 0 次出现\(?
(?:0{1,2}|\+)
- 一个或两个零或+
\d{1,2}
- 一位或两位数\)?
- 一个可选的)
[ -]*
- 0 个或更多空格或连字符
\d
- 一个数字(?:[ -]*\d){7,19}
- 用 0 个或多个空格或连字符分隔的七到十九位数字。