在正则表达式之前捕获字符

时间:2019-03-16 20:06:43

标签: javascript regex

我有一个关于我用JavaScript编写的正则表达式的快速问题。以下是(?<=,)(.*)(?=:),它捕获了,:之间的所有内容。但是,我希望它也能捕获逗号本身。

So,<< this is what my regex captures at the moment>>: end将成为

So<<, this is what my regex captures at the moment>>: end

我尝试在正则表达式中的.之前使用,,但似乎不起作用。

3 个答案:

答案 0 :(得分:0)

使用一个简单的捕获组-它比您当前的正则表达式短,并且效果很好:

var regex = /(,.*?):/g;
var string = "So,<< this is what my regex captures at the moment>>: end";
console.log(string.match(regex));

说明:

()-表示捕获组
,-匹配逗号
.?*-匹配任意数量的字符
:-匹配逗号

答案 1 :(得分:0)

假设双箭头用于指示当前模式匹配的开始和结束,则可以使用负字符类来匹配逗号,然后匹配1+倍而不是逗号:

,[^:]+

如果末尾的逗号应该存在,则可以使用捕获组:

(,[^:]+):

Regex demo

您可以仅通过匹配冒号来省略正向(?=:),因为您已经在使用捕获组来进行匹配。

const regex = /(,[^:]+):/;
const str = `So,<< this is what my regex captures at the moment>>: end`;
let res = str.match(regex);
console.log(res[1]);

答案 2 :(得分:0)

如您所说:

  

所以,<<这是我的正则表达式当前捕获的内容>>:end将变成   所以<<,这是我的正则表达式当前捕获的内容>>:结束。

您可以像这样使用replace

var str = `So,<< this is what my regex captures at the moment>>: end`;
var replace = str.replace(/(.*?)(,)(<<)(.*)/,"$1$3$2$4");
console.log(replace);