ruby regex匹配包含相对路径中的字符串而不是域中的URL

hiz5n14c  于 11个月前  发布在  Ruby
关注(0)|答案(4)|浏览(123)

这是我面试的一个问题,我没有想出一个足够好的解决方案,被拒绝了。
问题是

What is the one regex to match all urls that contain job(case insensitive) in the relative   
path(not domain) in the following list:

    - http://www.glassdoor.com/job/ABC
    - https://glassdoor.com/job/
    - HTTPs://job.com/test
    - Www.glassdoor.com/foo/bar/joBs
    - http://192.168.1.1/ABC/job
    - http://bankers.jobs/ABC/job

字符串
我的解决方案是使用lookaheadlookbehind/(?<!\.)job(?!\.)/i。这在上面的列表中工作正常。但是,如果URL是HTTPs://jobs.com/test,它将无法工作。
我想知道这个问题的正确答案是什么。提前感谢您的任何建议!

pieyvz9o

pieyvz9o1#

如果您不需要验证URL,只需关注'job'

#  /(?i)(?<=\/)job(?=\/|[^\S\r\n]*$)/

 (?i)
 (?<= / )
 job
 (?= / | [^\S\r\n]* $ )

字符串

omtl5h9j

omtl5h9j2#

试试这个regex:

\b(?:https?:\/\/)?[^\/:\n]+\/.*?job

字符串
Online RegEx Demo

RegEx详情:

  • \b:字边界
  • (?:https?:\/\/)?:匹配可选http://https://
  • [^\/:]+:匹配1+个不是/:的字符
  • \/:匹配/
  • .*?job:匹配0个或多个字符,后跟文本job
nnsrf1az

nnsrf1az3#

这是我想到的一个:

^(?:.*://)?(?:[wW]{3}\.)?([^:/])*/.*job.*

字符串
它匹配你所有的例子,但不匹配job.com或jobs.com的例子(jobs只在路径中)。
我在sublime text中测试了这个,这是很好的b/c,当你输入时,正则表达式的结果会高亮显示。

gwbalxhn

gwbalxhn4#

我在面试中也被问到这个问题,以下是我的解决方案:/./+job/?./i它在Rubular.com上运行良好

相关问题