Тестер регулярных выражений
Вот код для тестера регулярных выражений. Добро пожаловать в него.
html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<script>
$(function(){
google.script.run
.withSuccessHandler(function(rObj){
$('#text').val(rObj.text);
$('#pattern').val(rObj.pattern);
$('#results').css('background','white');
if(rObj.g.toLowerCase()=='yes'){$('#set_g').prop('checked',true);}else{$('#set_g').prop('checked',false);}
if(rObj.i.toLowerCase()=='yes'){$('#set_i').prop('checked',true);}else{$('#set_i').prop('checked',false);}
if(rObj.m.toLowerCase()=='yes'){$('#set_m').prop('checked',true);}else{$('#set_m').prop('checked',false);}
})
.getLastTextPatternFlags();
});
function findData(){
$('#results').css('background','yellow');
$('#results').val('');
var text=$('#text').val();
var pattern=$('#pattern').val();
var flags=getFlags();
try{
var regex=new RegExp(pattern,flags);
}
catch(e){
console.error(e);
$('#results').css('background','white');//This is test very much you should come back and look at this.
$('#results').val('Check Error in Console Log');
}
//var result=regex.exec(text);
result=text.match(regex);
if(result){
var rsltLog='';
for(var i=0;i<result.length;i++){
if(i>0){rsltLog+='\n'};
rsltLog+='result[' + i + ']= ' + result[i];
}
}
console.log('module: %s pattern: %s regex: %s flags: %s result: %s length: %s','findData()',pattern,regex,flags,rsltLog,result.length);
try{
if(result){
$('#results').val(rsltLog);
}else{
$('#results').val("No Results");
}
}
catch(e){
console.error(e);
}
$('#results').css('background','white');
}
function getFlags(){
var g=$('#set_g').is(':checked');
var i=$('#set_i').is(':checked');
var m=$('#set_m').is(':checked');
var flagsA=[];
if(g){flagsA.push('g');}
if(i){flagsA.push('i');}
if(m){flagsA.push('m');}
return flagsA.join('');
}
function saveText(){
$('#text').css('background','yellow');
var txt=$('#text').val();
google.script.run
.withSuccessHandler(function(){
$('#text').css('background','white');
})
.saveText(txt);
}
function savePattern(){
$('#pattern').css('background','yellow');
var txt=$('#pattern').val();
google.script.run
.withSuccessHandler(function(){
$('#pattern').css('background','white');
})
.savePattern(txt);
}
function saveFlags(){
$('#results').css('background','yellow');
var g=$('#set_g').is(':checked');
var i=$('#set_i').is(':checked');
var m=$('#set_m').is(':checked');
var flagObj={g:'no',i:'no',m:'no'};
if(g){flagObj.g='yes';}
if(i){flagObj.i='yes';}
if(m){flagObj.m='yes';}
google.script.run
.withSuccessHandler(function(){
$('#results').css('background','white');
})
.saveFlags(flagObj);
}
console.log('My Code');
</script>
<style>
.btns{margin:2px 2px 2px 0;}
#container{width:100%;}
</style>
<body>
<div id='container'>
TEXT <input class="btns" type="button" value="Save Text" onClick="saveText();" />
<br /><textarea id="text" placeholder="Enter the text to be searched" rows="4" cols="60"></textarea>
<br />PATTERN <input class="btns" type="button" value="Save Pattern" onClick="savePattern();" />
<br /><textarea id="pattern" placeholder="Enter the regex search expression" rows="4" cols="60"></textarea>
<br />RESULTS
<br /><textarea id="results" rows="4" cols="60"></textarea>
<br /><input type="button" value="Search" onClick="findData();" /> <input class="hostcontrol" type="button" value="Close" onClick="google.script.host.close();" />
g <input id="set_g" type="checkbox" />
i <input id="set_i" type="checkbox" />
m <input id="set_m" type="checkbox" />
<input type="button" value="Save Flags" onClick="saveFlags();" />
<p>Don't leave extra carriage returns in search pattern textbox.</p>
</div>
</body>
</html>
GS:
function showRegexDialog(){
var ui=HtmlService.createHtmlOutputFromFile('RegexTester').setWidth(800).setHeight(500);
SpreadsheetApp.getUi().showModelessDialog(ui, 'Regex Tester');
}
function getLastTextPatternFlags(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Input');
var rg=sh.getDataRange();
var vA=rg.getValues();
var rObj={};
for(var i=0;i<vA.length;i++){
rObj[vA[i][0]]=vA[i][1];
}
Logger.log(rObj);
return rObj;
}
function saveText(txt){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Input');
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=0;i<vA.length;i++){
if(vA[i][0]=='text'){
vA[i][1]=txt;
}
}
rg.setValues(vA);
return true;
}
function savePattern(txt){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Input');
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=0;i<vA.length;i++){
if(vA[i][0]=='pattern'){
vA[i][1]=txt;
}
}
rg.setValues(vA);
return true;
}
function saveFlags(flagObj){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Input');
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=0;i<vA.length;i++){
var n=String(vA[i][0]).toLowerCase();
if(n=='g' || n=='i' || n=='m'){
vA[i][1]=flagObj[n];
}
}
rg.setValues(vA);
return true;
}
function doGet(){
var output=HtmlService.createHtmlOutputFromFile('RegexTester');
output.append('<style>.hostcontrol{display:none;}</style>');
return output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
Веб-приложение:
Электронная таблица:
Синтаксис регулярного выражения