解析已知密钥的字符串正则表达式但保留分隔符

时间:2013-02-14 19:20:27

标签: javascript regex key-value

好的,所以我尝试制作正则表达式时遇到了一些麻烦。

基本上,我想要一个像:

这样的字符串
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)\=])

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

我怎么写它才能包含这个要求?

2 个答案:

答案 0 :(得分:2)

您可以像这样使用替换:

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

答案 1 :(得分:1)

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

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"]