2016-09-18 78 views
0

我想知道在正则表达式中匹配的字符之前插入字符的正则表达式。例如:在匹配之前插入内容的正则表达式

var string = "HelloYouHowAreYou" 
var regEx = /[A-Z\s]/g //to identify capital letters, but want to insert a dash before them 
string = string.replace(regEx,"-") 
console.log(string) 

我该如何解决这个问题?

+1

为什么您在字符类'\ s'如果你想只匹配大写字母? – revo

+0

请添加想得到的结果。 –

+0

我想把它用于空格和大写字母,但我的问题只是指的是大写部分。 – Zzgooloo

回答

2

你只需要使用反向引用$&在替换模式是指整场比赛:

var string = "HelloYouHowAreYou" 
 
var regEx = /[A-Z\s]/g; 
 
string = string.replace(regEx,"-$&") 
 
console.log(string)

如果你想避免在字符串的开头相匹配的大写ASCII字母,在开始添加(?!^)

var string = "HelloYouHowAreYou" 
 
var regEx = /(?!^)[A-Z\s]/g; 
 
string = string.replace(regEx,"-$&") 
 
console.log(string)

注意\s相匹配的空白。如果你想只匹配大写ASCII字母,使用

/[A-Z]/g 
+1

Downvotes不透露原因不会丰富任何人的知识。如果有人知道造成这种情况的原因,请告诉我如何改善这个答案。 –

+0

我确实认为对于当前的任务来说,2个周期太多了。原来的问题听起来像*正则表达式,用于在匹配之前插入内容*只需要一个'.replace(regEx,“ - $&”)'答案。 –

3

您可以使用积极的lookahead,它会查找指定的字符,但不会将其插入到匹配组中,并防止第一个字符在字符串的开头处显示破折号。

/(?!^)(?=[A-Z])/g 

var string = "HelloYouHowAreYou", 
 
    regEx = /(?!^)(?=[A-Z])/g; 
 

 
string = string.replace(regEx, "-"); 
 
console.log(string);

+1

单个超前就足够了。不需要点。 – revo

+1

更多,根本不需要查看。 –

+0

实际上有需要。 @WiktorStribiżew – revo

0

Wiktor的Stribiżew有一个伟大的答案了,但你也可以通过一个函数来替换方法,如果你想要做的字符串的额外的操作。

var string = "HelloYouHowAreYou" 
    var regEx = /[A-Z\s]/g //to identify capital letters, but want to insert a dash before them 
    function replacer(match) { 
     return ('-') + (match); 
    } 
    string = string.replace(regEx,replacer) 
    console.log(string)