根据正则表达式模式拆分字符串

时间:2017-03-20 20:42:49

标签: javascript regex

我是使用正则表达式的新手。鉴于字符串,我试图实现以下目标:

actStr1 = 'st1/str2/str3'
expStr1 = 'str3'

actStr2 = 'str1/str2/str3 // str4'
expStr2 = 'str3 // str4'

actStr3 = 'a1/b1/c1 : c2'
expStr3 = 'c1 : c2'

在这两种情况下,我想找到由'/'

分隔的最后一个字符串

'/'就像%s\/%s一样。分隔符'/'两边都有字符串

result1 = 'str3 // str4'
result2 = 'str3'

我使用正则表达式尝试了不同的模式,但它错误地返回'str4'分隔的'//'

我该如何避免这种情况?

由于

3 个答案:

答案 0 :(得分:1)

尝试使用String.prototype.split()直接定位您需要的内容,而不是使用String.prototype.match()

var testStrings = [ 'str1/str2/str3',
                    'str1/str2/str3 // str4',
                    'a1/b1/c1 : c2' ];

var re = new RegExp('[^/]*(?://+[^/]*)*$');

testStrings.forEach(function(elt) {
    console.log(elt.match(re)[0]);
});
/* str3
   str3 // str4
   c1 : c2 */

不太直接,您还可以使用String.prototype.replace()替换策略。我们的想法是删除所有斜杠,直到最后一个斜杠没有出现,而不是其他斜杠:

var re = new RegExp('(?:.*[^/]|^)/(?!/)');

testStrings.forEach(function(elt) {
    console.log(elt.replace(re, ''));
});

答案 1 :(得分:0)

您可以使用这样的正则表达式:

\/(\w+(?:$| .*))

<强> Working demo

从抓捕组中获取内容

答案 2 :(得分:0)

我认为你也可以考虑使用数组来解决这个问题!

function lastSlug(str) {
  // remove the '//' from the string
  var b = str.replace('//', '');
  // find the last index of '/'
  var c = b.lastIndexOf('/')  + 1;
  // return anything after that '/' 
  var d = str.slice(c);
  return d;
}

Demo