以下是我的字符串:
api/Node-1/{Node-1}/Node-1-1/{Node-1-1}
搜索字词:Node-1
替换为:学习
预期输出:
api/Learning/{Learning}/Node-1-1/{Node-1-1}
现在问题是Node-1也与其他Node-1-1匹配,但我想要精确的单词匹配和替换。
我尝试了很多选择,但没有一个适合我。
function replaceAll(str, find, replace) {
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
function escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
console.log(replaceAll('api/Node-1/{Node-1}/Node-1-1/{Node-1-1}','Node-1','Learning'));
var replaceStr = 'Node-1';
console.log( 'api/Node-1/{Node-1}/Node-1-1/{Node-1-1}'.replace(new RegExp("\\b"+replaceStr+"\\b","gi"),"Learning"));
console.log( 'api/Node-1/{Node-1}/Node-1-1/{Node-1-1}'.replace(/\bNode-1\b/g,'Learning'));
更新:此问题不重复,因为我的第一个答案仅来自此reference,但这与我的输入案例无关。
答案 0 :(得分:2)
Try this :
function replaceAll(str, find, replace) {
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
function escapeRegExp(str) {
return str + '(?![-])';
}
console.log(replaceAll('api/Node-1/{Node-1}/Node-1-1/{Node-1-1}', 'Node-1', 'Learning'));
It searches every str
occurence not followed by '-'. You can add other characters not to match if you want inside the character set.
答案 1 :(得分:1)
试试这个正则表达式^(?!.*Node-1\(?!-1))\w+.*
您可以在行动here
中看到它修改强>
所以你的代码是:
var str = 'api/Node-1/{Node-1}/Node-1-1/{Node-1-1}';
console.log(str.replace(new RegExp("Node-1\(?!-1)","gi"),"Learning"));
工作JsFiddle
答案 2 :(得分:1)
希望这个可以解决您的问题:
var a = "api/Node-1/{Node-1}/Node-1-1/{Node-1-1}";
var arr = a.split("/");
for (var i=0; i<arr.length; i++) {
var word = arr[i].replace(/[^a-zA-Z1-9- ]/g, "");
if (word=="Node-1"){
arr[i] = arr[i].replace("Node-1", "Learning");
}
}
newString = arr.join("/");
console.log(newString);
答案 3 :(得分:1)
使用 all-but-not 表达式
尝试此操作console.log('api/Node-1/{Node-1}/Node-1-1/{Node-1-1}'.replace(new RegExp("Node-1[^-]","gi"),"Learning"));