1

与えられた文字列: rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application\ Support/Sublime\ Text\ 3/Packages /Users/ken/Google\ Drive/__config-GD/ST3

スペースに一致する正規表現ですが、私が試したスペースをエスケープしました:

まず、エスケープされたスペース(または任意)に一致します。

\\.

http://regex101.com/r/uL0mP8 動作します。

次に、スペースに一致させるために、エスケープされたスペース (または任意) を除外します。

(?!\\.)

http://regex101.com/r/fK3sW9 は機能しません。

コードの何が問題になっていますか? ジャバスクリプト。

ありがとう

編集:

(?<!\\) http://regex101.com/r/fZ5uP2 wokrs!

負の負の後読みを使用する必要がありました...

EDIT2:

var command0 = `rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application\ Support/Sublime\ Text\ 3/Packages /Users/ken/Google\ Drive/__config-GD/ST3`;

var regex = new RegExp('(?<!\\)\s')
var commandA = command0.split(regex);

エラー - Invalid regular expression: /(?<!\\)\s/: Invalid group

おっと、JavaScript での回避策は何ですか??

OK の後読みは、JavaScript ではサポートされていません。http://regex101.com がどのように出力されるのかわかりません 。おそらくサーバー側のPHPまたはその他。

EDIT3:

これは非常にトリッキーでした。私が投稿した完全な作業コードを参照してください。

shell コマンドから child_process.spawn(command, [args], [options]) node.js

4

2 に答える 2

1

「エスケープされたスペース」と呼んでいるものを除くすべてのスペースを一致させようとしていますか。

否定的な後読みでそれを達成できるはずです:

(?<!\\)\s

が前に付いていない任意のスペースに一致し\ます。

使用していた 2 番目の正規表現は(?!\\.)\s、否定先読みを使用しており、その後に が続かないスペースを検索してい\(any character)たため、機能しませんでした。

編集:後読みは JavaScript では機能しません。新しいことを学びました。

于 2013-08-06T22:54:49.917 に答える
0

2番目のケースでは、次を使用できます。(?<!\\)

編集:私は通常、javascript を使用しないため、簡単なショートカットがわからないため、次の 2 つの手順でこれを実行できると思います。

  1. この正規表現を使用して置換(置換)を実行します: 、次のよう\\\sにセミコロンに置き換えます。;var newCommand = command0.replace(/\\\s/g, ";");
  2. 次に、この正規表現を使用して分割を実行します: 次\sのように:var result = newCommand.split(/\s/);
于 2013-08-06T22:53:54.560 に答える