我想知道在正则表达式匹配的字符之前插入字符的正则表达式。例如:
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)
我怎么能这样做?
答案 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)