2016-12-19 2 views
0

Webページに入力があり、別の場所に表示して送信します。現在の問題は、単一のバックスラッシュをバックスラッシュ以外の文字の間に挟み込んで、入力を別の場所に送信することです。バックスラッシュで囲まれていない文字の間に単一のバックスラッシュをエスケープ

テスト文字列"domain\name\\nonSingle\\\WontBe\\\\Returned"、ドメインと名前の間に最初の1つのバックスラッシュしか挿入しません。

この文字列は、私が最も近い得ることができます"\\get\\\nothing\\\\"

マイ現在のパターン[\w][\\](?!\\)しかし、これは私が列挙されている第一テスト文字列から"\n"を取得するで何を取得する必要があります。私は正規表現のlookbehindを使用したいと思いますが、javascriptは私が使用しているバージョンのためのものはありません。ここで私は現在、私は非効率的に非バックスラッシュ文字と(私はしたくない)、それらの前の文字の間に挟まれたすべての単一のバックスラッシュを抽出するために、この正規表現[\w][\\](?!\\)を使用していますhttp://www.regexpal.com/

に私regexsをテストしているサイトですとし、同じ文字列とその末尾にバックスラッシュを置き換えます。

たとえば、現在の正規表現[\w][\\]\(?!\\)"n\"を返します。この結果、私のコードはreplaceを使うのではなく、何らかの追加の処理を行う必要があります。

二重、三重、四重のバックスラッシュは気にしませんが、単独で放置することはできます。

+0

'domain \ name \ previousBackslashesUnwanted'の正規表現操作は何を返すと思いますか?これは私には分かりません – KevBot

+0

テスト文字列 "domain \ name \\ previousBackslashesUnwanted"は、ドメインと名前の間に\を1つだけ取得したいと考えています。 テスト文字列\\\\ get \\\\が指定されていない場合、目的の正規表現は何も返しません。私が持っている 最も近い正規表現は、[\\\] [\ W]である(?!\\\)(私はここにエスケープとのトラブルを抱えているが、唯一の2つの真ん中角括弧内のバックスラッシュと丸括弧があるはずです)単一のバックスラッシュの前に最初の文字を返します。 regexpal.com – user1821961

+0

あなたが試合ではどのように過ごしたいですか?それを別のものに置き換えますか?文字列を分割しますか?または、ユーザーのために強調表示しますか? –

答えて

0

最も簡単なエスケープ方法は、すべてのエスケープ文字を一致させることです。

\\(.) 

次に、取り込まれたものに基づいて何を行うかを決定します。

var s = "domain\\name\\\\backslashesInDoubleBackslashesWontBeReturned"; 
 
console.log('input:', s); 
 

 
var r = s.replace(/\\(.)/g, function (match, capture1) { 
 
    return capture1 === '\\' ? match : '$' + capture1; 
 
}); 
 
console.log('result:', r);

あなたが実際にエスケープバックスラッシュをマッチングすることはそれはバックスラッシュの奇数と一致して、キャプチャに最後の一つを除くすべてをキャプチャします

((?:^|[^\\])(?:\\\\)*)\\(?!\\) 

で取得することができます最も近いですグループ1。

var re = /((?:^|[^\\])(?:\\\\)*)\\(?!\\)/g; 
 
var s = "domain\\name\\\\escapedBackslashes\\\\\\test"; 
 

 
var parts = s.split(re); 
 
console.dir(parts); 
 

 
var cleaned = []; 
 
for (var i = 1; i < parts.length; i += 2) 
 
{ 
 
    cleaned.push(parts[i-1] + parts[i]); 
 
} 
 
cleaned.push(parts[parts.length - 1]); 
 
console.dir(cleaned);

偶数(0から数えて)の項目は一致しないテキストになります。奇数番号の項目はキャプチャされたテキストになります。

キャプチャされた各テキストは、上記のテキストの一部と考える必要があります。

+0

私の謝罪と非バックラッシュの間に挟まれた単一のバックスラッシュを交換したい、私は私の質問にサンプルテスト文字列を更新しました。私の現在のソリューションは、トリプルバックスラッシュでトリガしません。私は唯一の非バックスラッシュ文字に囲まれた単一のバックスラッシュでトリガ正規表現を望む> 1.バックスラッシュの連続した任意の奇数を処理する必要はありません。私は、現在の正規表現を使用して一致を少なく処理できます。 – user1821961

関連する問題