正则表达让我头晕目眩。你能用我的用例帮助我吗?
我需要能够将URL修改为此类: m.example.com/etc
源URL可以是任何内容:
www.example1.com/etc
example2.com/etc
example3.net/etc
trial.example4.com/etc
正则表达式只需要查看之前的部分 然后只看看.com或.net或.whatever之前的内容 当它是一个绝对的领域时,它将介绍m。 什么时候有www。或某些前缀。它将被转换为m。
所以使用上面的来源,我想:
m.example1.com/etc
m.example2.com/etc
m.example3.net/etc
m.example4.com/etc
答案 0 :(得分:1)
如果您不想使用正则表达式,则不必使用正则表达式,虽然时间稍长,但您可以使用某些字符串方法执行此操作。这是一个非常基本的例子:
function changeURL(string){
if( string.split(".").length > 2 ) {
var firstPart = string.substring(0,string.indexOf("."));
string = string.replace(firstPart, "m");
}
else{
string = "m."+string;
}
return string;
}
console.log(changeURL("www.example1.com/etc"));
console.log(changeURL("example2.com/etc"));
console.log(changeURL("example3.net/etc"));
console.log(changeURL("trial.example4.com/etc"));

所有人都会给出正确的结果。主要问题是我们不知道将example2.com
或www.example1.com
替换为m
之间的区别,它将是m.com
(我们不想要)和m.example1.com
(我们确实想要)。所以我做的是检查是否至少有两个或更多.
用m
替换第一个子字符串,否则juse将m.
添加到字符串中。显然这不适用于所有情况,您可以使用example5.com.net
轻松将其分解m.com.net
。
要解决此问题,您需要识别网址需要以www
,trial
等开头的所有可能项目,并检查这些项目。但如果它有什么,我们真的无法解决这个问题。
答案 1 :(得分:0)
RegEx是你的朋友
(.*)(\.*?\/.*)
第一组是您替换的组。第二组是.com /无论
(.*)(\..{3}\/.*)
如果你想确保它的结尾是三个字母
编辑: 试试这个:
(\..{2,3})*(\/.*)
如果域名长度为2或3个字符,则无效。但是你说你只需要一个主要工作的解决方案。
答案 2 :(得分:0)
这是一个修改后的正则表达式取自其他一些帖子
它所做的就是隔离URL的点部分的第一部分,
如果超过2个点。不知道这是不是你要找的。
查找:
^((?!mailto:)(?:(?:https?|ftp)://)?(?:\S+(?::\S*)?@)?)(?:(?|((?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])\.)((?:(?:1?\d{1,2}|2[0-4]\d|25[0-5])\.){2})([1-9]\d?|1\d\d|2[0-4]\d|25[0-4])(?!)|((?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+\.)?((?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+\.)+)([a-z\u00a1-\uffff]{2,}))|localhost(?!))((?::\d{2,5})?(?:\/[^\s]*)?)$
替换:$1m.$3$4$5
输入
www.example1.com/etc
example2.com/etc
example3.net/etc
trial.example4.com/etc
输出
m.example1.com/etc
m.example2.com/etc
m.example3.net/etc
m.example4.com/etc
正则表达式
^
# Device ------------
( # (1 start)
(?! mailto: )
(?:
(?: https? | ftp )
://
)?
(?:
\S+
(?: : \S* )?
@
)?
) # (1 end)
# Address ------------
(?:
(?| # Branch Reset start
# This part will be failed
# (left for posterity, remove block if not needed)
( # (2 start)
(?: [1-9] \d? | 1 \d\d | 2 [01] \d | 22 [0-3] )
\.
) # (2 end)
( # (3 start)
(?:
(?: 1? \d{1,2} | 2 [0-4] \d | 25 [0-5] )
\.
){2}
) # (3 end)
( [1-9] \d? | 1 \d\d | 2 [0-4] \d | 25 [0-4] ) # (4)
# Fail this part (remove this to include logic)
(?!)
| # Breset OR,
# This is the only part we are looking for
( # (2 start)
# Optional, First part (if greater than 2 dots)
# -----------------------------------
(?: [a-z\u00a1-\uffff0-9]+ -? )*
[a-z\u00a1-\uffff0-9]+
\.
)? # (2 end)
( # (3 start)
# First part (if equal 2 dots)
# Second part (if greater than 2 dots)
# -----------------------------------
(?:
(?: [a-z\u00a1-\uffff0-9]+ -? )*
[a-z\u00a1-\uffff0-9]+
\.
)+
) # (3 end)
( [a-z\u00a1-\uffff]{2,} ) # (4)
) # End of Branch Reset
| # or,
# Fail localhost (left for posterity)
localhost
(?!)
)
# Folder/Parameters ------------
( # (5 start)
(?: : \d{2,5} )?
(?: \/ [^\s]* )?
) # (5 end)
$