zoukankan      html  css  js  c++  java
  • 正则表达式小程序

    此博客链接:https://www.cnblogs.com/ping2yingshi/p/13211942.html

    正则表达式小程序

    第一章 正则表达式小程序二维码

     

    第二章 项目需求

    2.1 总述

    (1)页面中能够手动输入字符串和正则表达式,在显示匹配结果的显示框中能显示输入的字符串,并且匹配的字符串显示红色。

    (2)页面中能够例举出常用正则表达式示例,避免用户忘记正则表达式的写法,便于用户快速匹配所需内容。

    2.2 用户故事

    1)用户故事一:用户打开正则表达式小程序,用户选择待输入文本输入框,从手机底部弹出系统键盘,用户输入字符串;用户选择正则表达式输入框,使用键盘输入正则表达式,点击匹配按钮,系统键盘消失,在显示匹配结果的输出框中显示用户输入的字符串,并且匹配的字符串显示红色。

    用户故事一截图:

    用户刚进入小程序页面。

     

    用户点击待匹配文本输入框,弹出键盘。

     

    用户使用键盘,输入待匹配文本。

     

    用户点击正则表达式输入框。

     

    用户用键盘输入正则表达式。

     

    用户点击匹配按钮,匹配的字符串在输出框以红色显示出来。

     

     2)用户故事二:用户打开正则表达式小程序,用户选择待输入文本输入框,从手机底部弹出系统键盘,用户输入字符串。用户点击常用正则表达式下拉框,选择所需正则表达式,所需要的正则表达式显示在正则表达式输入框的位置。用户点击匹配按钮,系统键盘消失,在显示匹配结果的输出框中,显示用户输入的字符串,并且匹配的字符串显示红色。

    用户故事二截图:

    用户进入小程序页面。

    用户在待匹配文本输入框输入字符串。

     

    用户选择常用正则表达式下拉框中的汉字。

     

    汉字正则表达式出现在正则表达式输入框中。

      

    用户点击匹配按钮,匹配的正则表达式以红色显示在输出框中。

     

    第三章 涉及技术

    3.1 用状态机实现自定义键盘中的[]

    3.1.1 说明

    自定义键盘中有[],当用户点击[]时,光标位置应该在[]里面。用户可以选择在[]里面插入、删除字符串或者在[]外面插入、删除字符串,这里使用状态机判断用户是在[]里面插入、删除字符串还是在[]外面插入、删除字符串。

    3.1.2 示例效果

    用状态机实现了光标在[]外或者[]内的字符串插入、删除。

    3.1.3 在此项目中的作用

    用户点击[]后,在[]里面插入、删除字符串或者在[]外面插入、删除字符串,都可以在输入框中的正确位置显示字符串。

    3.1.4 状态机图

    3.1.5 代码

    switch(this.data.s){

    case 0:

    if(keyValue=="[]")

    {

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=1;

    }

    else{

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=0;

    }

    break;

    case 1:

    if(this.data.costfocus>this.data.result.indexOf(']')||this.data.costfocus<this.data.result.indexOf('['))//光标在[]两侧,即光标在[]外。

    {

    if(this.data.result.indexOf('[]')&&keyValue=="[]")

    {

    return ;

    }

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=3;

    }

    else {

    if(this.data.result.indexOf('[]')&&keyValue=="[]")

    {

    return ;

    }

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=2;

    }

    break;

    case 2:

    if(this.data.costfocus>this.data.result.indexOf(']')||this.data.costfocus<this.data.result.indexOf('['))//光标在[]两侧,即光标在[]外。

    {

    if(this.data.result.indexOf('[]')&&keyValue=="[]")

    {

    return ;

    }

    if(keyValue!='Del')

    {

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1; 

    }

    else if(keyValue=='Del')

    {

    premouse=this.data.result.slice(0,this.data.cursorindex-1);

    res=premouse+moused;

    pos=this.data.cursorindex-1;   

    this.data.s=3;

    }

    else {//在[]内增加字符串

    if(this.data.result.indexOf('[]')&&keyValue=="[]")

    {

    return ;

    }

    if(keyValue!='Del')

    {

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=2;

    }

    else if(keyValue=='Del')

    {

    if(this.data.result.indexOf('[')+2==this.data.result.indexOf(']'))

    {

    this.data.s=1;

    }

    else

    {

    this.data.s=2;

    }

    premouse=this.data.result.slice(0,this.data.cursorindex-1);

    res=premouse+moused;

    pos=this.data.cursorindex-1;

    }

    }

    break;

    case 3:

    if(this.data.costfocus>this.data.result.indexOf(']')||this.data.costfocus<this.data.result.indexOf('['))//光标在[]两侧,即光标在[]外。

    {

    if(this.data.result.indexOf('[]')&&keyValue=="[]")

    {

    return ;

    }

    if(keyValue!='Del')

    {

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=3;

    }

    else if(keyValue=='Del')

    {

    if(!this.data.result.indexOf("[]"))

    {

    this.data.s=0;

    console.log("heihi")

    }

    else

    {

    this.data.s=3;

    }

    premouse=this.data.result.slice(0,this.data.cursorindex-1);

    res=premouse+moused;

    pos=this.data.cursorindex-1;

    }

    }

    else {//在[]内增加字符串

    if(this.data.result.indexOf('[]')&&keyValue=="[]")

    {

    return;

    }

    if(keyValue=='Del')

    {

    if(this.data.result.length.indexOf('[')+2==this.data.result.length.indexOf(']'))

    {

    this.data.s=1;

    }

    else

    {

    this.data.s=2;

    }

    premouse=this.data.result.slice(0,this.data.cursorindex-1);

    res=premouse+moused;

    pos=this.data.cursorindex-1;

    }

    else{

    res=premouse+keyValue+moused;

    pos=this.data.cursorindex+1;

    this.data.s=2

    }

    }

    break;

    }

    3.1.6 代码说明

    开始s的状态为0,当s处于0状态下,判断触发条件是否为[],如果触发条件为[]时,把获取的光标最后一次在输入框的位置值加1,并把触发条件的[]拼接在光标前面的字符串后面,把光标后面的字符串拼接在[]的后面,状态机状态变成状态1。如果触发条件不是[],状态机状态还是状态0。当状态为1时,如果光标位置是在]的右边或者[的左边,状态机状态变成状态3,如果光标位置是在[]的之间,状态机状态变为状态2。当状态为2时,如果光标位置是在]的右边或者[的左边,状态机状态变成状态3,如果光标位置是在[]的之间,[]内部还有字符串,状态机状态还是状态2,如果光标位置是在[]的之间,[]内部没有字符串,状态机状态变成状态1。当状态为3时,如果光标位置是在]的右边或者[的左边,,状态机状态还是状态3,如果字符串中不包含[],状态机状态变成状态0,如果光标位置是在[]的之间,[]之间还有字符,状态机状态变为状态2,如果光标位置在[]之间,[]之间没有字符串,状态机状态变成状态1。

    3.2 不同颜色字符串拼接

    3.2.1 说明

    此技术支持了字符串匹配结果中,颜色不同的匹配的红色字符串和不匹配的黑色字符串拼接在一起,在wxml上以同一行显示出来。

    3.2.2 示例效果

    把匹配的红色字符串和不匹配的黑色字符串拼接在一起显示。

     

    3.2.3 在此项目中的作用

    用颜色区分匹配的字符串和不匹配的字符串。

    3.2.4 代码

    function myFunction(){

    var len=arguments.length;

    var str="";

    for(var i=1;i<len;i=i+2)

    {

    str=str.concat(arguments[i-1].fontcolor(arguments[i]));

    }

    return str;

    }

    myFunction("红色","red","黑色","black");

    3.2.5 代码说明

    定义一个拼接字符串的函数,函数中使用fontcolor来给字符串添加颜色。传入字符串和颜色值作为参数调用函数。

    3.3 匹配字符串

    3.3.1 说明

    正则表达式匹配字符串。

    3.3.2 示例效果

    匹配数字123。

    3.3.3 在此项目中的作用

    匹配字符串,保证用户输入的字符串能按顺序显示在匹配结果中。

    3.3.4 原理

    js中的String对象支持正则表达式的match方法,可在字符串内检索指定的值,找到一个或多个正则表达式的匹配。

    3.3.5 示例代码

    var str=”123abc”

    var reg=new RegExp(/[0-9]+/,'g');

    var macthed=str.match(reg)

    3.3.6 代码说明

    在js中定义一个字符串123abc, 用构造函数创建了正则表达式对象reg,使用字符串的match()方法,找到正则表达式的匹配。

    第四章 感谢

    感谢老师对整个项目的指导,每天给予我进度都做出点评,给出建议和路线指导,让我能够完成这个项目。感谢吴晓倩、徐娇阳、王辉对本项目的后期测试,能让我完善项目。

  • 相关阅读:
    谈谈关系类并查集
    并查集的应用
    关于欧拉线筛
    bzo4802 欧拉函数 miller_rabin pollard_rho
    数论
    前端切图:自制简易音乐播放器
    前端切图:自制简易音乐播放器
    SEO那些事:一句代码一键分享网站
    SEO那些事:一句代码一键分享网站
    前端调用百度API
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/13211942.html
Copyright © 2011-2022 走看看