分析已知键的字符串正则表达式,但保留分隔符

Parse string regex for known keys but leave separator

本文关键字:正则表达式 保留 分隔符 字符串      更新时间:2023-09-26

好的,所以我在制作正则表达式时遇到了一点障碍。

本质上,我想要一个字符串,比如:

error=some=new item user=max dateFrom=2013-01-15T05:00:00.000Z dateTo=2013-01-16T05:00:00.000Z

要解析以读取

error=some=new item
user=max
dateFrom=2013-01-15T05:00:00.000Z
ateTo=2013-01-16T05:00:00.000Z

因此,我希望它提取已知的关键字,并忽略其他具有=的字符串。

我当前的正则表达式如下:

(error|user|dateFrom|dateTo|timeFrom|timeTo|hang)'=['w's'f'-':]+(?![(error|user|dateFrom|dateTo|timeFrom|timeTo|hang)'=])

所以我使用已知的关键字来动态使用,这样我就可以将它们列为已知关键字。

我怎么能把这个要求写进去呢?

您可以使用类似这样的替换:

var input = "error=some=new item user=max dateFrom=2013-01-15T05:00:00.000Z dateTo=2013-01-16T05:00:00.000Z";
var result = input.replace(/'s*'b((?:error|user|dateFrom|dateTo|timeFrom|timeTo|hang)=)/g, "'n$1");
result = result.replace(/^'r?'n/, ""); // remove the first line

结果:

error=some=new item 
user=max 
dateFrom=2013-01-15T05:00:00.000Z 
dateTo=2013-01-16T05:00:00.000Z

另一种标记字符串的方法:

var tokens = inputString.split(/ (?=[^= ]+=)/);

正则表达式查找后面的空格(以=结尾的非空格非等号序列),并在这些空格处进行拆分。

结果:

["error=some=new item", "user=max", "dateFrom=2013-01-15T05:00:00.000Z", "dateTo=2013-01-16T05:00:00.000Z"]

使用上面的技术并根据您的问题调整正则表达式:

var tokens = inputString.split(/(?='b(?:error|user|dateFrom|dateTo|timeFrom|timeTo|hang)=)/);

这将正确分割评论中提到的Qtax指出的输入:"error=user=max foo=bar"

["error=", "user=max foo=bar"]