通过正则表达式修改URL

时间:2015-01-29 20:55:55

标签: regex

正则表达让我头晕目眩。你能用我的用例帮助我吗?

我需要能够将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

3 个答案:

答案 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.comwww.example1.com替换为m之间的区别,它将是m.com(我们不想要)和m.example1.com(我们确实想要)。所以我做的是检查是否至少有两个或更多.m替换第一个子字符串,否则juse将m.添加到字符串中。显然这不适用于所有情况,您可以使用example5.com.net轻松将其分解m.com.net

要解决此问题,您需要识别网址需要以wwwtrial等开头的所有可能项目,并检查这些项目。但如果它有什么,我们真的无法解决这个问题。

答案 1 :(得分:0)

RegEx是你的朋友

(.*)(\.*?\/.*)

第一组是您替换的组。第二组是.com /无论

(.*)(\..{3}\/.*)

如果你想确保它的结尾是三个字母

编辑: 试试这个:

(\..{2,3})*(\/.*)

如果域名长度为2或3个字符,则无效。但是你说你只需要一个主要工作的解决方案。

我推荐这个网站: https://www.myregextester.com/index.php

答案 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)
 $