Search code examples
javascriptregextextsubstring

JavaScript text between double quotes


I would like to get the text between double quotes using JavaScript. I found online something like title.match(/".*?"/); but the thing is that sometimes I have text between double quotes but sometimes there are no quotes. What I am saying is that sometimes I receive strings like: Neque porro quisquam est qui dolorem ipsum and sometimes strings like: Neque "porro quisquam est" qui dolorem ipsum. The thing is, when I have text containing double quotes I want to retrieve the text between them but when they aren't present, I'd like the whole text. Also I have observered that string.indexOf("\"") does not work and I don't really know how to approach this problem. Thanks.


Solution

  • Try:

    <script>
    let str1 = 'Neque porro quisquam est qui dolorem ipsum';
    let str2 = 'Neque "porro quisquam est" qui dolorem ipsum';
    let str3 = 'Neque "porro';
    let str4 = 'Neque "porro" quisquam "est" qui dolorem ipsum';
    
    function extractFirstText(str){
      const matches = str.match(/"(.*?)"/);
      return console.log(matches
        ? matches[1]
        : str);
    }
    
    
    function extractAllText(str){
      const re = /"(.*?)"/g;
      const result = [];
      let current;
      while (current = re.exec(str)) {
        result.push(current.pop());
      }
      return console.log(result.length > 0
        ? result
        : [str]);
    }
    
    // Execution of the functions
    
    extractFirstText(str1);
    //Neque porro quisquam est qui dolorem ipsum
    
    extractFirstText(str2);
    //porro quisquam est
    
    extractFirstText(str3);
    //Neque "porro
    
    extractFirstText(str4);
    //porro
    
    extractAllText(str1);
    //Array [ "Neque porro quisquam est qui dolorem ipsum" ]
    
    extractAllText(str2);
    //Array [ "porro quisquam est" ]
    
    extractAllText(str3);
    //Array [ "Neque \"porro" ]
    
    extractAllText(str4);
    //Array [ "porro", "est" ]
    </script>

    EDIT reworked to take into account both @AshishMaity comment in a discarded edit about matching more than one substring, and @JosephCho comment about the original breaking in case there is a single quote (str3 in the case above)