假设我有字符串:
var a = '/c/Slug-A/Slug-B/Slug-C'
我有3种可能性:
var b = 'Slug-A' || 'Slug-B' || 'Slug-C'
我的期望:
if (b === 'Slug-A') return 'Slug B - Slug C';
if (b === 'Slug-B') return 'Slug A - Slug C';
if (b === 'Slug-C') return 'Slug A - Slug B';
到目前为止我做了什么:
a.replace(b,'')
.replace(/\/c\//,'') // clear /c/
.replace(/-/g,' ')
.replace(/\//g,' - ')
然后,我被困了
任何帮助将不胜感激。感谢
答案 0 :(得分:1)
试试这个:
var a = '/c/Slug-A/Slug-B/Slug-C'
var b = 'Slug-A' || 'Slug-B' || 'Slug-C'
var reg = new RegExp(b.replace(/([A-z]$)/,function(val){return '[^'+val+']'}),'g');
a.match(reg).map(function(val){return val.replace('-',' ')}).join(' - ');
<强>阐释:强>
替换字符串b
捕获字符串的最后一个字符串,并将其替换为^
正则表达式符号。这意味着它将忽略它而不是捕获它。
这意味着它意味着它现在只匹配不包含最后一个字符的Slag-
。
所有要做的就是用你喜欢的任何连接来回复它。
答案 1 :(得分:1)
试试这个,我尽可能简单。
var a = '/c/Slug-A/Slug-B/Slug-C';
var b = 'Slug-A';
var regex = new RegExp(b+'|\/c\/|-|\/','g');
alert(a.replace(regex, " ").trim().replace(/(\s.*?)\s+/,'$1 - '));
//OR
alert(a.replace(regex, " ").trim().match(/\w+\s\w/g).join(' - '));
<强>解释强>
1)b+'|\/c\/|-|\/','g'
=匹配b
值,/c/
,-
和/
2)a.replace(regex, " ")
=用空格替换所有匹配的部分。所以a将是Slug A Slug B
3).replace(/(\s.*?)\s+/,'$1 - ')
=匹配空格内任何内容的两个空格。然后将其替换为附加的match + ' - '
。
注意我们已在正则表达式(\s.*?)
中对部分(\s.*?)\s+
进行了分组。因此,此分组已完成,以便在使用新文本替换它时可以使用它。 $1
保留匹配文本的分组部分$1 = " A"
。所以我正在做的是匹配正则表达式:" A "
并且只用" A"
+ " A"
= " - "
替换分组部分即" A - "
。
4).match(/\w+\s\w/g).join(' - ')
=匹配字符后跟空格后跟一个字符的所有部分。 match
将返回一系列匹配的部分。然后我使用join
加入此数组。
答案 2 :(得分:0)
这样做
var a = '/c/Slug-A/Slug-B/Slug-C'
var b = 'Slug-A'
//var b = 'Slug-B'
//var b = 'Slug-C'
var k = a.replace(b,'')
.replace(/\/c\//,'') // clear /c/
.replace(/-/g,' ')
.match(/[a-zA-Z -]+/g).join(" - ")
console.log(k)
工作阵列here