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(/ (?=[^= ]+=)/);

正規表現は、(で終わる非スペース非等号シーケンス=)が続くスペースを探し、それらのスペースで分割します。

結果:

["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 に答える