我已经看到了以下问题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中只用一个-
替换它?
答案 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, '-');