JSFiddle - React, Tailwind, and code Playground
HTML
<script type="text/plain" id="code">
var test = [
"// Code",
'// Code',
"'// Code",
'"// Code',
//" Comment",
//' Comment',
/* Comment */
// Comment /* Comment
/* Comment
Comment // */ "Code",
"Code",
"/* Code */",
"/* Code",
"Code */",
'/* Code */',
'/* Code',
'Code */',
/* Comment
"Comment",
Comment */ "Code",
/Code\/*/,
"Code */"
]
</script>
<div ng-app="" ng-controller="TestController as tc" ng-init="tc.test()">
<textarea
ng-model="tc.regExpString"
ng-change="tc.test()"
placeholder="/your+regexp/g"
class="form-control"></textarea>
<div class="alert alert-danger" ng-show="tc.error">{{tc.error.message}}</div>
<div class="alert alert-warning" ng-show="!tc.pass">
Expected Codes: {{tc.expectedResult.codes}}, Comments: {{tc.expectedResults.comments}}<br />
Actual Codes: {{tc.actualResult.codes}}, Comments: {{tc.actualResult.comments}}
</div>
<div class="alert alert-success" ng-show="tc.pass">That works!!!</div>
<div class="row">
<div class="col-xs-6">
Input:
<pre>{{tc.code}}</pre>
</div>
<div class="col-xs-6">
Output:
<pre>{{tc.output}}</pre>
</div>
</div>
</div>
CSS
@import url('//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css');
textarea {
font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
}
JavaScript
function TestController() {
var tc = angular.extend(this, {
code: code.innerText,
regExp: /((["'])(?:\\[\s\S]|.)*?\2|\/(?![*\/])(?:\\.|\[(?:\\.|.)\]|.)*?\/)|\/\/.*?$|\/\*[\s\S]*?\*\//gm,
output: '',
error: '',
expectedResult: {
codes: 0,
comments: 0
},
expectedResult: {
codes: 0,
comments: 0
},
test: test,
pass: false,
calculateResult: calculateResult
});
function test() {
tc.error = '';
try {
tc.expectedResult = calculateResult(tc.code.replace(/Comment/g, ''));
var regexp = tc.regExp;
if (!regexp || regexp.constructor != RegExp)
throw Error('Expression must result in an RegExp.');
tc.output = tc.code.replace(regexp, '$1');
tc.actualResult = calculateResult(tc.output);
tc.pass = angular.toJson(tc.expectedResult) == angular.toJson(tc.actualResult);
} catch (ex) {
tc.error = ex;
}
}
function calculateResult(text) {
return {
codes: text.split('Code').length - 1,
comments: text.split('Comment').length - 1
};
}
}