在javascript中删除特定的重复字符

时间:2014-03-06 04:53:17

标签: javascript regex slug

我已经看到了以下问题Regex to remove a specific repeated character,这与我的非常相似(如果不是很精确),但它是用C#实现的,并使用该语言的字符串方法。

我想知道是否有人可以提出javascript实施它?

如果你有

的例子
what---is-your-name- => what-is-your-name

---what-is----your-name-- => what-is-your-name

那么如何删除特定字符的重复发生,在这种情况下-并在javascript中只用一个-替换它?

6 个答案:

答案 0 :(得分:6)

一次性拍摄:

str.replace(/^-+|-+(?=-|$)/g, '')

说明:

(?=..)是一个先行断言,意味着后跟。这只是一张支票而不是匹配结果的一部分。

关于-+(?=-|$)

由于默认情况下量词是贪婪的-+匹配字符串的一部分中的所有-,因此测试了前瞻:两种可能的情况

予。该部分位于字符串的中间:hello-----world

因为在前瞻失败后只有一个w,正则表达式引擎会返回一个字符。现在-+仅匹配四个-后跟-,前瞻性成功。由于它不是匹配的一部分,因此替换函数不会删除最后一个-

II。该部分位于字符串的末尾:world-----

-+匹配所有-,直到字符串结束和前瞻断言成功的第二部分。替换函数删除了所有-

答案 1 :(得分:2)

类似这样的事情

var str = "---what---is-your----name-----";
var res1 = str.replace(/^-+/,'');
console.log(res1);
var res2 = res1.replace(/-+$/,'');
console.log(res2);
var res3 = res2.replace(/-+/g,'-');
console.log(res3);

或者您可以简单地将所有条件合并为一个

str.replace(/^-+|-+$|-+/g,'-');

答案 2 :(得分:1)

这应该这样做:

 var newValue = value.replace(/-+/g, '-');

您提供的示例与您对问题的描述相矛盾,因为您希望在开头和结尾删除所有连字符。如果是这样,这样就可以了:

 var newValue = value.replace(/^-+|-+$/g, '').replace(/-+/g, '-');

答案 3 :(得分:1)

使用此正则表达式

.replace(/\-+/g,'-').replace(/^-|-$/g, '');

答案 4 :(得分:1)

这是一个变体答案,只使用一个正则表达式和一个String.replace调用;其他答案仍然适用。

s = s.replace(/^-*|-*$|(-)-*/g, "$1");

所以:

s = "---what-is----your-name--";
s = s.replace(/^-*|-*$|(-)-*/g, "$1");
// s == what-is-your-name

说明:

^-*    // match any number of dashes at the start
-*$    // match any number of dashes at the end
(-)-*  // match one or more dashes, capturing one dash in 1st group

/g     // match globally/repeatedly

"$1"   // replace with 1st group value;
       // so it will replace with "-" or "" (for undefined capture)

答案 5 :(得分:0)

"what---is-your-name-".replace(/\-+/g, '-');