正则表达式用于替换中间字母

时间:2019-05-31 00:57:27

标签: javascript regex string regex-lookarounds regex-group

无效的正则表达式:无效的组

除了(),我尝试了固定和更改。至$ 但不起作用

var name = 'ABC'
var pattern = /(?<=.{1})./
return name.replace(pattern, " * ")

我要替换为“ A * C”

无效的正则表达式:无效的组

4 个答案:

答案 0 :(得分:0)

在这里,我们可能只想使用开始和结束锚点并编写一个简单的表达式,例如:

^([A-Z]).([A-Z])$

替换为:

$1*$2

const regex = /^([A-Z]).([A-Z])$/gm;
const str = `ABC`;
const subst = `$1*$2`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

Demo

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改/更改。

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:0)

要使“ ABC”成为A * C或CDE成为C * E,您可以使用substr ..:)

dplyr
aggregate

答案 2 :(得分:0)

您的模式使用回溯方式,这对浏览器的支持有限。

如果支持向后搜索,则模式(如果左侧为任意字符,则可以缩短为(?<=.).的任何字符。

在ABC中将与B匹配,但在ABCD中将与^(.).(?=.$) 匹配,因此与中间字符不匹配。

另一个选择是使用:

$1*

在替换使用中(没有前导和尾随空格):

.

请注意,点\S匹配除换行符以外的任何字符,因此它也匹配空格。如果您不想匹配空格,则可以改用var name = 'ABC'; var pattern = /^(.).(?=.$)/; console.log(name.replace(pattern, "$1*"));

let strings = [
  "A",
  "AB",
  "ABC",
  "ABCD",
  "ABCDE",
  "ABCDEF",
  "ABCDEFG",
  "ABCDEFGH",
  "ABCDEFGHI"
].reduce(function(a, c) {
  if (c.length % 2 === 1) {
    let evenHalf = (c.length - 1) / 2;
    a.push(c.substr(0, evenHalf) + '*' + c.substr(evenHalf + 1));
  }
  return a;
}, []);

console.log(strings);

您可以在不使用正则表达式的情况下替换中间字符:

.Options(o =>
{
    o.Decorate<IErrorHandler>(c => {
        var errorHandler = c.Get<IErrorHandler>();
        var loggerFactory = c.Get<IRebusLoggerFactory>();
        return new ErrorMessageHandler(errorHandler, loggerFactory));
    });
}

答案 3 :(得分:0)

具有捕获组的正则表达式解决方案:

var name = 'ABC';
var pattern = /(.)./;
return name.replace(pattern, "$1 * ")

通过$1可以在替换参数中找到与第一个括号匹配的内容。

快速测试:

var name = 'ABC'
var pattern = /(.)./
console.log(name.replace(pattern, "$1 * "))