我正在解決一個需要替換負的正則表達式的問題。在javascript中替換負數正則表達式的函數
如果我有一個字符串text
,正則表達式模式re
和轉換函數f
我想有一個negativeReplace
函數替換所有不text
串通過應用匹配re
模式子串轉換功能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已經有replace
功能,與匹配模式。並用negative regex
這樣的簡單情況替換爲用空白替換除了數字以外的所有字符,在this post中有解決辦法。
所以我的問題是我怎樣才能更好地解決這個問題(我可以使用replace
爲此,我怎樣才能改善我的代碼)。
非常感謝。
鏈接的帖子並不是真正的「負面」正則表達式,因爲該解決方案使用正則匹配個別字符的正則表達式進行替換。您的要求並不屬於同一類別。 – nnnnnn
您是否需要爲*特定表達式*或* any *表達式執行此操作?而且你正在替換*表達式匹配的部分字符串,所以目前還不清楚你在這裏做了什麼。 –
@ T.J.Crowder在我的問題中,我必須多次使用這個函數。 *這個特定的表達式*僅僅是一個簡單的測試用例來描述我的問題。我**做**替換**不匹配**表達式的所有子字符串。請仔細看看我的代碼,並且在我寫和這篇文章時與一些測試用例一起工作。非常感謝你 –