今天在codewars上做了一道题,如下

看上去就是验证三种括号各种嵌套是否正确书写,本来一头雾水,一种括号很容易判断, 但是三种怎么判断!

本人只是个前端菜鸟,,不会什么高深的正则之类的。

于是,在群里一吼,有人这样建议:

 js 的正则虽然不支持平衡组 但是可以通过一些技巧来弥补 老夫只能说这么多了,天机不可泄露 
当然 也可以写个小算法 搞个栈玩玩
楼主听上去好厉害的样子,虽然不懂什么平衡组正则,但是栈还可以想一下啊!!
于是,开始了思考,该怎样用栈的思维来解出这个题呢?是将左边括号都进入一个栈,右括号进入另一栈,然后怎么比较。不会,下一个;
在冥思苦想中,终于有了!
首先思路是这样的:
  定义了一个栈;定义了一个匹配用的字符串;
  循环这个各种括号组成的字符串,判断当前这个符号是不是左括号,如果是则入栈,如果不是,则出栈,出栈元素与当前符号的相对应左括号匹配。
下面是代码
function check(str) {
var arr = str.split('') // 将传入字符串转化为数组
var stack = new Stack() // 新建栈
var aString = '({[]})' // 用来匹配的字符串
var index = -1 //初始化下标 for (var i = 0; i < arr.length; i++) {
var item = arr[i]
if ((index = aString.indexOf(item)) < 3) { // 将每一项都用aString匹配,下标小于3就是左括号
// 左括号,入栈
stack.into(item)
} else {
// 右括号,栈列表出栈一个元素与之匹配
var target = stack.out()
// 如果出栈元素不存在,则这个右括号没有响应匹配的左括号,验证失败
if (!target) {
return false
}
// 取出与 item 对应的左括号与出栈元素匹配,不相等则验证失败
if (target !== aString.charAt(5-index)) {
return false
}
}
}
// 循环匹配完成后,如果栈列表还有元素,则缺少与之匹配的右括号,验证失败
if (stack.size()) {
return false
}
// ok
return true
}

Stack是自己写的一个栈构造函数,简单的入栈,出栈,长度。

终于搞定了.

 

javascript匹配各种括号书写是否正确的更多相关文章

  1. 对如下字符串(234453)[234]{2324}分析它的括号使用是否正确,括号匹配(Java实现)

    我的一种思路是递归: private static String s = "(2344[)]53[234]{2324}"; private static boolean f(int ...

  2. Javascript Date 判断输入日期是否正确

    JavaScript的Date对象有容错性,可将随意给定的日期的年月日自动生成正确的日期时间 //JavaScript中Date对象容错性 function dateCheck(){ var date ...

  3. Ubuntu下VS Code 字体设置 + 标签匹配、括号匹配插件

    Ubuntu下比较好看的字体有: Courier NewSource Code ProWenQuanYi Micro HeiWenQuanYi Micro Hei MonoUbuntuDroid Sa ...

  4. 在JavaScript中什么时候使用==是正确的?

    在JavaScript中什么情况下使用==是正确的?简而言之:没有.这篇文章来看五种情况下总是使用===,并且解释为什么不用==. JavaScript有两种操作符用来比较两个值是否相等 [1]: 严 ...

  5. LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)

    题目链接 : https://leetcode.com/problems/generate-parentheses/?tab=Description   给一个整数n,找到所有合法的 () pairs ...

  6. JavaScript 匹配字符串偶数位置的字符 及匹配 $ 符号

    已知一个字符串#####,现需要替换偶数位置的#为&. function replaceDemo(){ var s = "1#2#3#4#5#"; var regex = ...

  7. JavaScript 匹配浮点数

    //匹配整数,正小数 appUtils.bindEvent($(_pageId+" .remind-list-con input"),function(){ var reg = / ...

  8. 反人类的MyEclipse之-调整JavaScript代码-花括号换行显示

    然后将除最后一项外所有的都勾选为Next Line

  9. c# 正则匹配对称括号

    https://stackoverflow.com/questions/7898310/using-regex-to-balance-match-parenthesis

随机推荐

  1. 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...

  2. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  3. C语言 · 整数平均值

    编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以 ...

  4. 算法与数据结构(十一) 平衡二叉树(AVL树)

    今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...

  5. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  6. 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

    坏味道--夸夸其谈未来性(Speculative Generality) 特征 存在未被使用的类.函数.字段或参数. 问题原因 有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现.结果,代码变得 ...

  7. Python 基础之一变量和赋值

    变量:程序在运行的时候会用到很多临时存储数据,这个时候就用到了变量,临时数据的名字. Python中变量不需要声明,直接可以使用,变量的数据类型由赋值确定. >>> name=&qu ...

  8. 5.0 JS中引用类型介绍

    其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...

  9. [AlwaysOn Availability Groups]健康模型 Part 1——概述

    健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...

  10. Centos 7 vsftpd ldap 配置

    #ldap 安裝配置 环境Centos7#安装 yum install -y openldap openldap-clients openldap-servers migrationtools pam ...