Javascript and backslashes replace

前端 未结 7 1470
伪装坚强ぢ
伪装坚强ぢ 2020-11-27 07:50

here is my string:

var str = \"This is my \\string\";

This is my code:

var replaced = str.replace(\"/\\\\/\", \"\\\\\\\\\")         


        
相关标签:
7条回答
  • 2020-11-27 08:30

    Got stumped by this for ages and all the answers kept insisting that the source string needs to already have escaped backslashes in it ... which isn't always the case.

    Do this ..

    var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
    
    0 讨论(0)
  • 2020-11-27 08:40

    Use this

    str.replace(/(\s)/g,function($0){return $0==' '?' ':'\\s'})
    

    or

    str.replace(/ /g,'something').replace(/\s/g,'\\s').replace(/something/g,' ');
    

    'something' it may be a combination of characters that is not in string

    var str=' \s';  
      str.replace(/\s/g,'\\s'); 
    // return '\\s\\s'   
      str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' ');
    // return ' \\s' 
    
    0 讨论(0)
  • 2020-11-27 08:45

    The string doesn't contain a backslash, it contains the \s escape sequence.

    var str = "This is my \\string";
    

    And if you want a regular expression, you should have a regular expression, not a string.

    var replaced = str.replace(/\\/, "\\\\");
    
    0 讨论(0)
  • 2020-11-27 08:47

    I haven't tried this, but the following should work

    var replaced = str.replace((new RegExp("\s"),"\\s");
    

    Essentially you don't want to replace "\", you want to replace the character represented by the "\s" escape sequence.

    Unfortunately you're going to need to do this for every letter of the alphabet, every number, symbol, etc in order to cover all bases

    0 讨论(0)
  • 2020-11-27 08:48

    If use case is to replace some values in the toString of a function, and convert the string back to a valid function.

    var exFnStr1 = exFn.toString();
    
    var exFnStr = "";
    var quoteStarted = false;
    for(i = 0; i < exFnStr1.length; i++) {
        var iChar = exFnStr1.charAt(i);
        var oChar = exFnStr1.charAt(i);
        var currentCharCode = exFnStr1.charCodeAt(i);
        if(quoteStarted) {
            if(currentCharCode === 9) oChar = "tabChar";
            if(currentCharCode === 10) oChar = "newlineChar";
        }
        //console.log(iChar+"->"+currentCharCode+"->"+oChar)
        exFnStr += oChar;
    
        if(currentCharCode === 34) {
            if(quoteStarted) quoteStarted = false;
            else quoteStarted = true;
        }
    }
    console.log(exFnStr);
    
    //TODO - replace values in the string
    
    exFn = new Function('return ' + exFnStr)();
    
    0 讨论(0)
  • 2020-11-27 08:51

    The problem is that the \ in your first line isn't even recognized. It thinks the backslash is going to mark an escape sequence, but \s isn't an escape character, so it's ignored. Your var str is interpreted as just "This is my string". Try str.indexOf("\\") - you'll find it's -1, since there is no backslash at all. If you control the content of str, do what David says - add another \ to escape the first.

    0 讨论(0)
提交回复
热议问题