Regex Express在'/'之前返回所有字符,但如果有2'/'在此之前返回所有字符

时间:2019-11-06 07:27:09

标签: regex

在以下情况下,我一直在尝试获取正则表达式以返回以下内容。

XX         ->   XX
XXX        ->   XXX
XX/XX      ->   XX
XX/XX/XX   ->   XX/XX
XXX/XXX/XX ->   XXX/XXX

我有以下正则表达式,但是它们没有用。

^[^/]+     => https://regex101.com/r/xvCbNB/1
=========
([A-Z])\w+ => https://regex101.com/r/xvCbNB/2

他们很近但是不在那儿。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

在此处使用替换来匹配/,然后在行尾使用非斜杠字符会更容易:

搜索正则表达式:

/[^/]*$

替换字符串:

""

Updated RegEx Demo 1


如果您要查找正则表达式匹配项,请使用此正则表达式:

^(.*?)(?:/[^/]*)?$

Updated RegEx Demo 2

答案 1 :(得分:3)

您要获取从某个字符开始到最后出现的所有文本,或者如果缺少该字符,则要获取字符串的结尾。

使用

React.cloneElement(BaseMessage, { icon: '' })

请参见regex demoregex graph

enter image description here

详细信息

  • ^(?:.*(?=\/)|.+) -字符串的开头
  • ^-一个非捕获组,它与两个选择中的任何一个都匹配,如果第一个与第一个匹配,则将不尝试第二个:
    • (?:.*(?=\/)|.+)-除换行符以外的任何0+字符,应尽可能多但不包括.*(?=\/)
    • /-或
    • |-尽可能多的除换行符以外的任何1+个字符。

答案 2 :(得分:1)

任何特殊原因必须要使用正则表达式吗?仅在斜线处分割字符串,删除最后一项然后重新加入,该如何做:

function removeItemAfterLastSlash(string) {
  const list = string.split(/\//);
  if (list.length == 1) [
     return string;
  } 

  list.pop();
  return list.join("/");
}

或者寻找最后一个斜杠并将其删除:

function removeItemAfterLastSlash(string) {
  const index = string.lastIndexOf("/");
  if (index === -1) {
    return string;
  }
  return string.splice(0, index);
}