我是使用正则表达式的新手。鉴于字符串,我试图实现以下目标:
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'
分隔的'//'
。
我该如何避免这种情况?
由于
答案 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)
答案 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;
}