正则表达式分割字符串并保留分隔符。

3

我正在尝试拆分字符串并保留分隔符。我已经接近成功了,但还没有完全弄明白。我在Stack Overflow上找到了很多例子,但仍然遇到了一个无法解决的问题。以下是代码:

"This is a string with ${G:VarSome:G} text".split(/\$\{(.+?(}\(.+?\)|}))/g)

以上代码产生的结果为:
['This is a string with ', 'G:VarSome:G}', '}', ' text']

我需要的结果是:
['This is a string with ', '${G:VarSome:G}', ' text']

${G:SomeVar:G}模式是一种模板系统,其中将注入变量。还有其他格式的变量,例如${G:AnotherVar:1}、${G:DifferentVar:5}等。在获取拆分字符串后,我将在系统中进行变量查找,以注入相应的变量。

2个回答

3
你的正则表达式中有一个多余的捕获组,这会导致你只能得到一个捕获组。

const result = "This is a string with ${G:VarSome:G} text".split(/(\${.+?})/g);

console.log(result);

获取单个捕获组的正则表达式如下。它返回()中所有捕获的内容。

/(\${.+?})/g

这应该可以捕获提供的示例。 regex101

首先获取${,然后懒惰地获取一个或多个字符(.+?),直到遇到一个}构建它。


1
您可以使用此正则表达式进行分割:
/(\${[^}]*})/

代码:

var s = 'This is a string with ${G:VarSome:G} text';
var arr = s.split(/(\${[^}]*})/);

console.log(arr);

这里:

  • \${[^}]*}:将匹配${后跟0个或多个非}字符,然后是}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接