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

regular expression for inserting something before what is matched

本文关键字:插入 正则表达式 用于      更新时间:2023-09-26

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

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)

我怎样才能做到这一点?

您可以使用正向查找,它查找指定的字符,但不将其插入到匹配组中,并防止第一个字符在字符串开头获得破折号。

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

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

您只需要在替换模式中使用$& backreference来引用整个匹配:

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

Wiktor Stribiż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)