JSFiddle - React, Tailwind, and code Playground

by kadymov

HTML

<textarea id="source" style="width: 100%; height: 300px;">
//this "is" 'line' comment
/* this 'is'
   "block" 
    comment */
/'this-' is "-regexp"/xxx

"this is 'double' quotes sting"
'this "is" single quotes sting'
"inner \"quotes\""
'inner \'quotes\''
</textarea>
<br/>
<input type="button" id="convert" value="Convert" />
<div id="log"></div>

JavaScript

var fixQuotes = (function() {
    'strict mode';
    
    var parse = (function() {
        
        function getLineComment(str, id) {
            id += 2;
            for (var len = str.length; id < len; id++) {
                if (str.charAt(id) === '\n') return id;
            }
        }

        function getBlockComment(str, id) {
            id += 1;
            for (var len = str.length; id < len; id++) {
                if (str.charAt(id) === '*' && str.charAt(id + 1) === '/') {
                    return id + 2;
                }
            }
        }

        function getRegExp(str, id) {
            id += 1;
            for (var len = str.length; id < len; id++) {
                if (str.charAt(id) === '/') {
                    if (str.charAt(id - 1) === '\\' && str.charAt(id - 2) !== '\\')
                        continue;
                    return id + 1; 
                }
            }
        }

        function getString(str, id, quotes) {
            id += 1;
            for (var len = str.length; id < len; id++) {
                if (str.charAt(id) === quotes) {
                    if (str.charAt(id - 1) === '\\' && str.charAt(id - 2) !== '\\')
                        continue;
                    return id + 1; 
                }
            }
        }

        return function (str) {
            var stringsArray = [];

            for (var charId = 0, length = str.length; charId < length; charId++) {
                var char = str.charAt(charId),
                    startId = charId;

                if (char === '\'' || char === '"') {
                    charId = getString(str, charId, char);
                    var newString = {
                        str : str.substring(startId, charId),
                        start : startId,
                        end : charId
                    };
                    stringsArray.push(newString);
                    
                } else if(char === '/') {
                    var secChar =...