Haha, vamos começar com algumas palavras. No ano passado usei C# para fazer uma ferramenta de realce de sintaxe. Ele formatou o código fornecido em HTML com base nas informações do arquivo de configuração, para que possa exibir a mesma sintaxe na página da web. no editor. Efeito de destaque de elemento e suporte para dobramento de código. Isso mesmo, é parecido com o que você viu no blog. Como eu estava usando o MSN Space na época, ele não oferecia essa função, então tive que escrever um sozinho.
Usei C# para escrever. No início, usei instruções básicas super complicadas, como for, while, switch, if, etc., para julgar palavras-chave, etc. expressão regular era na época, então só posso usar esse método bruto. É claro que o método bruto ainda é eficaz. É apenas um código longo em uma função que será muito difícil de manter. outro software não pode ser escrito assim, então... Depois de pesquisar um pouco no Google, encontrei alguns códigos e projetos de código aberto com destaque de sintaxe e comecei a dar uma olhada. . . . . Nossa, tudo é tão complicado. Para ser sincero, o que mais não gosto de fazer é olhar o código dos outros. Não sou pretensioso, mas é muito confuso olhar o código dos outros. uma descrição muito detalhada do documento, caso contrário, não quero olhar para ele à primeira vista. No máximo, apenas vejo como outras pessoas escrevem a interface e depois adivinho como ela é implementada internamente.
Embora a pesquisa não tenha sido muito útil, ainda assim me fez saber sobre expressões regulares que esqueci onde as vi. Naquela época, comecei a estudar expressões regulares enquanto aprimorava minhas "coisas quebradas". Não muito depois disso, comecei a blogar novamente no Blog Park e finalmente habilitei a função de destaque de sintaxe do Blog Park. Então, perdi a maior motivação para escrever meu próprio código para destacar HTML. Em segundo lugar, o módulo de realce de sintaxe feito em C# só pode ser executado no lado do servidor ou no programa WinForm, e o que eu quero obter é o código HTML para exibir na página. Acho que os scripts do lado do cliente são mais adequados para este trabalho. É uma pena que eu não saiba muito sobre JS. . . Posteriormente, comecei a mexer em outras coisas nesse período e não melhorei o módulo de realce de sintaxe.
Trabalhei horas extras ontem à noite e voltei para casa. Planejei originalmente continuar aprendendo UML e ver os padrões. Então lembrei que a empresa tinha um módulo que precisava remover todas as tags HTML nos resultados retornados pelo banco de dados, então abri o normal. ferramenta de expressão RegexBuddy. Como resultado, vi um tutorial simples sobre como usar expressões regulares em JScript no documento de ajuda do RegexBuddy, então minha curiosidade surgiu novamente, então abri o UltraEdit-32 e comecei a escrever JavaScript simples para experimentar.
Não entrarei em detalhes do meu processo de teste aqui, porque muitos lugares envolvem testes repetidos e muitos desvios. Aqui darei diretamente o uso de expressões regulares em JScript que resumi dos testes.
Chega de bobagem, vamos direto ao ponto!
O primeiro-ministro fala sobre o objeto de expressão regular RegExp do JScript.
O nome da classe que fornece operações de expressão regular em JScript é RegExp, e objetos do tipo RegExp podem ser instanciados de duas maneiras.
Método 1, instanciação do construtor:
var myRegex = new RegExp(" \w +", "igm ");
//w+ é a expressão regular real. Observe que o primeiro é para escapar igm significa ignorar maiúsculas e minúsculas, pesquisa global e pesquisa multilinha, respectivamente.
Método dois, método de atribuição direta:
var myRegex = /w+/igm;
//O efeito é o mesmo da instrução anterior, exceto que não há necessidade de usar caracteres de transferência aqui. A expressão regular original é a que parece. igm tem o mesmo efeito que igm no exemplo anterior.
O método específico usado depende da preferência de cada um. Pessoalmente, acho que o segundo método é mais fácil de ler ao escrever regex. O documento de ajuda do RegexBuddy também recomenda o segundo método. O objeto RegExp inclui as seguintes operações:
exec(string str): executa a correspondência de expressões regulares e retorna os resultados correspondentes. De acordo com o exemplo de execução de resultados fornecido pelo MSDN, cada execução de exec começa no final da última correspondência direta. o valor retornado parece ser um objeto RerExp, e a explicação dada por RegexBuddy é retornar uma matriz, mas nenhum exemplo detalhado é fornecido, acho que é mais confiável com base nos resultados experimentais.
compile (string regex, string flags): Pré-compile expressões regulares para fazê-las funcionar mais rapidamente. Após o teste, a eficiência é significativamente melhorada após a pré-compilação. O parâmetro regex é uma expressão regular e os sinalizadores podem ser uma combinação dos três valores a seguir: g – pesquisa global O resultado do meu teste é que, sem adicionar o sinalizador g, ele só pode corresponder à primeira string qualificada i – ignorando o caso m. – A pesquisa multilinha parece ser uma pesquisa multilinha por padrão,
teste (string str): se str corresponder à expressão regular, ele retorna verdadeiro, caso contrário, retorna falso. Este método de correspondência semelhante ao objeto string
objeto RegExp contém os seguintes atributos. :
índice: na string A posição da primeira expressão correspondente, inicialmente -1
entrada: o destino correspondente da expressão regular, observe que é somente leitura
lastIndex: A posição da próxima expressão correspondente. A palavra original é (Retorna a posição do caractere onde a próxima correspondência começa em uma string pesquisada). Não sei se há um erro de tradução.
lastMatch: a última string que corresponde à expressão
lastParen: a última string de subcorrespondência correspondida. Por exemplo, se houver várias correspondências agrupadas por () em uma expressão regular, lastParen representará o último grupo de resultados correspondidos.
leftContext: Todos os caracteres desde o início da string de destino até a posição inicial da última correspondência.
rightContext: todos os caracteres do final da última correspondência até o final de toda a string de destino.
$1...$9: Indica o resultado do enésimo grupo de correspondências. Isso é útil quando há vários grupos () na expressão regular.
A seguir, vamos falar sobre as operações relacionadas ao objeto String e às expressões regulares em JScript:
match
.(string regex): aceita uma expressão regular e retorna se a string corresponde à expressão.
replace(srting regex, string str): Substitua a substring que corresponde à expressão regular por str. Esta função parece simples, mas também oculta um uso mais avançado.
Exemplo 1:
var str1 = "A:Meu nome é Peter!nB:Olá Peter!";
str1 = str1.replace(/Peter/g,"Jack");
alerta(str1);
Este exemplo é tão simples quanto substituir uma string. O poder desta expressão obviamente não se limita a isso. Se você tiver habilidade em usá-la, também poderá usá-la para concluir muitas tarefas que anteriormente exigiam muito código. Por exemplo, adicione tags HTML destacadas antes e depois das palavras-chave do código. No exemplo anterior, parece que a substituição só pode substituir o texto correspondente pelo novo texto. Como posso usá-lo para inserir tags antes e depois das palavras-chave? Pensando bem, se você puder usar os resultados correspondentes ao substituir, as coisas serão mais fáceis. Basta substituir as palavras-chave por: cabeçalho da tag + palavra-chave + cauda da tag.
Mas como usar os resultados da correspondência de expressões regulares na substituição?
Neste momento, precisamos usar "variáveis correspondentes". As variáveis correspondentes são usadas para representar os resultados da correspondência regular.
$& - representa os resultados correspondentes de todos os grupos correspondentes. Finalmente, o grupo correspondente é o grupo () da expressão regular.
$$ - representa o caractere $ Como a variável correspondente usa o caractere $, ela precisa ser escapada.
$n - semelhante ao $1...$9 anterior, indicando o enésimo conjunto de resultados correspondentes
$nn – simplesmente o resultado do nono grupo de partidas
$` - é o leftContext mencionado anteriormente. Por exemplo, se abcdefg corresponder a d, então abc será seu leftContext.
$' -- É muito próximo do acima, não leia errado! , este é o rightContext. Por analogia, efg é o rightContext do exemplo acima. Agora é muito simples inserir tags antes e depois das palavras-chave:
var str1 = "A:My name is Peter!nB:Hi. Peter!" ;
str1 = str1.replace(/Peter/g, "<b>$&</b>");
alerta(str1);
Já são 0:39. . . Vamos parar aqui.
Download regular do software da ferramenta (senha: regex): regex buddy 2.06.zip
Por favor, veja o exemplo que escrevi: Destaque de sintaxe JScript (otimização de código)
Aqui estão alguns exemplos do MSDN:
função matchDemo()
{
vars;
var re = new RegExp("d(b+)(d)","ig");
varstr = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 contém: " + RegExp.$1 + "n";
s += "$2 contém: " + RegExp.$2 + "n";
s += "$3 contém: " + RegExp.$3;
retorno(s);
}
função RegExpTest()
{
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5,5){
var src = "A chuva na Espanha cai principalmente na planície.";
var re = /w+/g;
var arr;
while ((arr = re.exec(src)) != nulo)
imprimir(arr.index + "-" + arr.lastIndex + "t" + arr);
}
outro{
alert("Você precisa de uma versão mais recente do JScript para que isso funcione");
}
}
função matchDemo()
{
var s; //Declara variável.
var re = new RegExp("d(b+)(d)","ig"); //Padrão de expressão regular.
var str = "cdbBdbsbdbdz"; //String a ser pesquisada.
var arr = re.exec(str); //Executa a pesquisa.
s = "$1 retorna: " + RegExp.$1 + "n";
s += "$2 retorna: " + RegExp.$2 + "n";
s += "$3 retorna: " + RegExp.$3 + "n";
s += "a entrada retorna: " + RegExp.input + "n";
s += "lastMatch retorna: " + RegExp.lastMatch + "n";
s += "leftContext retorna: " + RegExp.leftContext + "n";
s += "rightContext retorna: " + RegExp.rightContext + "n";
s += "lastParen retorna: " + RegExp.lastParen + "n";
return(s); //Retorna resultados.
}
document.write(matchDemo());
Se algum herói que estiver passando tiver alguma opinião sobre este artigo, sinta-se à vontade para publicá-la aqui. Vamos aprender e progredir juntos.