查找并替换长字符串

时间:2017-06-20 12:09:21

标签: javascript

以下是我的字符串:

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,但这与我的输入案例无关。

4 个答案:

答案 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);

检查小提琴:https://jsfiddle.net/z8v0xt98/

答案 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"));