私は負の正規表現を置き換える必要がある問題で取り組んでいます。javascriptの正規表現の置換機能
私は、文字列text
、正規表現パターンre
と私はすべてのを適用することによりtext
文字列にre
パターンでサブ文字列と一致しない置き換えるnegativeReplace
機能を持つようにしたい機能f
を変換している場合関数f
を変換し、残りの部分を残してください。ここで
# input
var text = " aa (bb) cc ";
var re = /[\(].*?[\)]/g;
var f = function(s){ return s.toUpperCase() }
# expected output
negativeReplace(text, re, f)
# -> " AA (bb) CC "
は、それが働いていたこれまでの
function negativeReplace(text, re, f){
var output = ""
var boundary = 0;
while((match = re.exec(text)) != null){
output += f(text.slice(boundary, match.index)) + match[0];
boundary = match.index + match[0].length;
}
output += f(text.slice(boundary, text.length));
return output;
}
私の最高の試みです!
function negativeReplace(text, re, f){
var output = ""
var boundary = 0;
while((match = re.exec(text)) != null){
output += f(text.slice(boundary, match.index)) + match[0];
boundary = match.index + match[0].length;
}
output += f(text.slice(boundary, text.length));
return output;
}
var text1 = " aa (bb) cc ";
var text2 = " aa { bb } cc { dd } ee ";
var f1 = function(s){ return s.toUpperCase() }
var f2 = function(s){ return "_" + s + "_" }
re = /[\({].*?[\)}]/g
console.log(negativeReplace(text1, re, f1)) // AA (bb) CC
console.log(negativeReplace(text2, re, f1)) // AA { bb } CC { dd } EE
console.log(negativeReplace(text1, re, f2)) // _ aa _(bb)_ cc _
console.log(negativeReplace(text2, re, f2)) // _ aa _{ bb }_ cc _{ dd }_ ee
しかし、私の実装は複雑すぎるようです。 javascriptはすでにの機能を持っていますので、と一致するパターンです。 のような簡単な場合は、のように、数字以外のすべての文字を以外の文字に置き換えると、this postに解決策があります。
この問題を解決するにはどうすればよいですか(replace
を使用してコードを改善するにはどうすればよいですか)。
ありがとうございました。
リンクされたポストは実際には置換される個々の文字に確実に一致する正規表現を使用するという点で、 "否定的な"正規表現ではありません。あなたの要件は実際には同じカテゴリにはありません。 – nnnnnn
*その特定の式*、または*の*式のためにこれを行う必要がありますか?そして、あなたは現在、式にマッチする文字列の一部を置き換えているので、実際にここで何をしようとしているのかははっきりしません。 –
@ T.J.Crowder私の問題では、私は何度もこの関数を使わなければなりません。 *その特定の表現*は、私の問題を記述するための単なるテストケースです。 ** ** ** **表現にマッチしないすべての部分文字列を置き換えます。私のコードをもっと慎重に見てください。私が書いたように、この記事はいくつかのテストケースで動作しました。ありがとうございました –