2016-02-15 14 views
6

Esiste un analizzatore di codice JavaScript che può essere utilizzato sul lato client per analizzare gli schemi di codice? Ho trovato il seguente, ma sembra che questo sia solo per il testo normale e ti dà il segno =, ecc. Ho bisogno di qualche analisi del codice che può essere eseguita sul lato client (codice JS), c'è qualche che può essere usato?Analizzatore di codice JavaScript lato client

function parseData() { 
 
    var rawData = document.getElementById('data').value.trim(), 
 
     result, 
 
     output = $('#output'), 
 
     table = $('table').remove(), 
 
     header, 
 
     row, 
 
     cell, 
 
     ul, 
 
     slice, 
 
     wpm = [],   
 
     wpmAvg = []; 
 

 
    output.empty(); 
 
    table.find('thead, tbody').empty(); 
 

 
    if ($('[name="format"]:checked').val() === 'text') { 
 
    // Simple text   
 
    result = analyzeText(rawData); 
 
    output.append('Word count: ' + result.count + '<br><br>Frequent words:<br>'); 
 
    ul = $('<ul>'); 
 
    _.forEach(result.frequentWords, function(value, key) { 
 
     ul.append('<li>' + value.word + ': ' + value.count + '</li>'); 
 
    }); 
 
    output.append(ul);  
 
    } 
 
    else { 
 
    // JSON 
 
    try { 
 
     data = JSON.parse(rawData); 
 
    } 
 
    catch(e) { 
 
     console.log('Error parsing JSON', e); 
 
    } 
 
    header = table.find('thead'); 
 
    body = table.find('tbody'); 
 
    row = $('<tr>'); 
 
    body.append(row); 
 
    // Loop over slices 
 
    _.forEach(data, function(value, key) { 
 
     slice = ''; 
 
     // Loop over statements 
 
     _.forEach(value, function(value, key) { 
 
     slice += value.words + ' '; 
 
     }); 
 

 
     result = analyzeText(slice); 
 

 
     addCell(slice, key); 
 

 
    }); 
 
    $.plot('#wpm', [wpm], { 
 
     xaxes: [{ 
 
     axisLabel: 'Time index (1-minute increments)', 
 
     }], 
 
     yaxes: [{ 
 
     position: 'left', 
 
     axisLabel: 'Words per minute', 
 
     }] 
 
    }); 
 
    output.append(table); 
 
    } 
 

 
    function addCell(data, index) { 
 
    var cell1, cell2, ul1, ul2, result; 
 
    cell1 = $('<td>'); 
 
    cell2 = $('<td>'); 
 
    ul1 = $('<ul>'); 
 
    ul2 = $('<ul>'); 
 
    cell1.append(ul1); 
 
    cell2.append(ul2); 
 
    row.append(cell1, cell2); 
 
    result = analyzeText(data); 
 
    header.append('<th>' + index + '</th><th class="subText">(' + result.count + ')</th>'); 
 
    wpm.push([index, result.count]); 
 
    _.forEach(result.frequentWords, function(value, key) { 
 
     ul1.append('<li>' + value.word + '</li>'); 
 
     ul2.append('<li>' + value.count + '</li>'); 
 
    }); 
 
    } 
 
} 
 

 
function analyzeText(rawData) { 
 
    var result = { 
 
    count: 0, 
 
    frequentWords: [] 
 
    }, 
 
     data = rawData.split(/[\s.,]+/g) 
 
    counts = {}, 
 
    countsArray = [], 
 
    commonWords = [ 
 
    0,1,2,3,4,5,6,7,8,9,    
 
    '-', 
 
    'a', 
 
    'about', 
 
    'function', 
 
    'object' 
 
    ]; 
 

 
    if (!data[data.length]) { 
 
    data.splice(-1, 1); 
 
    } 
 

 
    // Word count 
 
    result.count = data.length; 
 

 
    // Word frequency (filtered for common words, sorted descending by count) 
 
    for (var i = 0; i < data.length; i++) { 
 
    if (!counts.hasOwnProperty(data[i].toLowerCase())) { 
 
     counts[data[i].toLowerCase()] = 1; 
 
    } 
 
    else { 
 
     counts[data[i].toLowerCase()] += 1; 
 
    } 
 
    }  
 
    _.forEach(counts, function(value, key) { 
 
    if (commonWords.indexOf(key.toLowerCase()) === -1) { 
 
     countsArray.push({ 
 
     word: key.toLowerCase(), 
 
     count: value 
 
     }); 
 
    } 
 
    }); 
 
    countsArray = _.sortBy(countsArray, 'count').reverse();  
 
    _.forEach(countsArray, function(value, index) { 
 
    if (value.count > 1) { 
 
     result.frequentWords.push(value);    
 
    } 
 
    }); 
 

 
    return result; 
 
}
body { 
 
    font-family: arial; 
 
} 
 
table, tr, td, th { 
 
    border-collapse: collapse; 
 
    border: solid 1px #ddd; 
 
} 
 
th, td { 
 
    padding: 4px 8px;  
 
} 
 
.subText { 
 
    color:#999; 
 
    font-style: italic; 
 
} 
 
#wpm { 
 
    width:600px; 
 
    height: 400px; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
 
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.js"></script> 
 

 
<textarea id="data" cols="80" rows="20" placeholder="Paste text or JSON here"></textarea><br /> 
 
<label for="text"><input type="radio" name="format" checked value="text" id="text"> Simple text</label> 
 
<button type="button" onclick="parseData()">Analyze text</button> 
 
<br><br> 
 
<div id="output"></div><br><br> 
 
<div id="wpm"></div> 
 
<table> 
 
    <thead> 
 
    </thead> 
 
    <tbody> 
 
    </tbody> 
 
</table>

https://jsfiddle.net/fxn5q8y0/6/

+0

Stai parlando di espressioni regolari? – Jai

+0

@Jai - forse sotto la cappa voglio fornire un codice che sarà analizzato riguardo qualche struttura di parole chiave o forse qualche pattern ecc. –

+0

Si prega di essere più specifici .. Di cosa hai bisogno ** esattamente ** 'analisi del testo' non è abbastanza . –

risposta

0

Semplicemente ciclicamente ogni elemento in un ambito e rilevare il tipo.

Ecco un rapido esempio:

var analyse = function(obj){ 
 
    var results = {} 
 
    
 
    for(var b in obj) { // for each element 
 
    if(obj.hasOwnProperty(b)){ 
 
     var detectedType = (typeof obj[b]) // detect the type 
 
     if (!(detectedType in results)){ results[detectedType] = 0; } // if the type was detected for the first time, add its name to the results 
 
     
 
     results[detectedType]++; // increase the counter for the detected type 
 
    } 
 
    } 
 
    
 
    return results; 
 
} 
 

 

 

 
/** 
 
    example for a testObject 
 
**/ 
 

 
testObject = { 
 
    a: undefined, // type undefined 
 
    b: { xx: "xx", yy: 123 }, // type object 
 
    c: false, // type boolean 
 
    d: 987, // type number 
 
    e: "abc", // type string 
 
    f: Symbol("foo"), // type symbol 
 
    g: function(){}, // type function 
 
    h: "jkl", // type number 
 
    i: 654 // type number 
 
}; 
 

 
console.log(analyse(testObject));

+0

Anche se questo snippet di codice può risolvere la domanda, [compresa una spiegazione] (http://meta.stackexchange.com/questions/114762/explaining-entally-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni! – Rizier123