用于在匹配之前插入内容的正则表达式

时间:2016-09-18 20:58:25

标签: javascript regex string

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

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)

我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

您可以使用正向前瞻,查找指定的字符,但不将其插入到匹配组中,并防止第一个字符在字符串的开头加上短划线。

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



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

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




答案 1 :(得分: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

答案 2 :(得分:0)

WiktorStribiżew已经有了一个很好的答案,但是如果你想对字符串进行额外的操作,你也可以将函数传递给replace方法。

    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)