好的,所以我尝试制作正则表达式时遇到了一些麻烦。
基本上,我想要一个像:
这样的字符串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)\=])
所以我使用已知的关键字动态使用,所以我可以将它们列为已知的。
我怎么写它才能包含这个要求?
答案 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"]