2

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

本质上,我想要一个像这样的字符串:

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)\=])

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

我怎么能写它来包括这个要求?

4

2 回答 2

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
于 2013-02-14T19:50:05.860 回答
1

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

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

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

结果:

["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"]
于 2013-02-14T20:03:31.023 回答