四种情况的代码演示

来源:4-4 正则表达式匹配-代码演示

_玲

2019-02-24

四种情况:

  1. 无模式
  2. s*
  3. .*
  4. .
    export default (str, pattern) => {
      /**
     * 如何分组?
     * split?
     *    1.如何用于分组的断点不被刨除。
     *    2.断点进行分组
     * match?
     *    1.将字符串完全匹配
     *    2.需要分组的部分使用排他性的组合
     */
      const modeArr = pattern.match(/([a-z.]\*)|(\.)|([a-z]+(?=([a-z.]\*)|$))/g)
      // const modeArr = pattern.split(/([a-z.]\*)|(\.)|([a-z]+(?=([a-z.]\*)|$))/g).filter(item => !!item)
      let rest = str
      for (let i = 0, length = modeArr.length; i < length; i++) {
        const mode = modeArr[i]
        if (mode.indexOf('.') !== -1 || mode.indexOf('*') !== -1) {
          if (mode === '.') {
            rest = rest.slice(1)
          } else if (mode === '.*') {
            rest = rest.slice(rest.match(new RegExp(`${rest.charAt(0)}*`))[0].length)
          } else {
            if (rest.charAt(0) === mode[0]) {
              rest = rest.slice(rest.match(new RegExp(`${rest.charAt(0)}*`))[0].length)
            } else {
              return false
            }
          }
        } else {
          if (rest.slice(0, mode.length) === mode) {
            rest = rest.slice(mode.length)
          } else {
            return false
          }
        }
      }
      if (rest) {
        return false
      }
      return true
    }

测试用例

import regModeStr from '../../code/regexp/lesson2'

test('regModeStr', () => {
  expect(regModeStr('aaa', 'caa*')).toBe(false)
})
test('regModeStr:2', () => {
  expect(regModeStr('aaabc', 'a*bc')).toBe(true)
})
test('regModeStr:3', () => {
  expect(regModeStr('aaabc', 'a*.*')).toBe(false)
})

test('regModeStr:4', () => {
  expect(regModeStr('aa', '.a')).toBe(true)
})

test('regModeStr:5', () => {
  expect(regModeStr('aab', '.*')).toBe(false)
})
写回答

2回答

_玲

提问者

2019-02-25

test('regModeStr:4', () => {

    expect(regModeStr('aaaaaaac', 'a*ac')).toBe(true)

})

测试用例跑不过!!!!


0
4
_玲
回复
快乐动起来呀
?这本来是给我自己的,提醒自己测试用例跑不过
2019-02-28
共4条回复

快乐动起来呀

2019-02-25

还有一种.*a

0
2
快乐动起来呀
我之前也是这么处理的,但是大家觉得不应该放在一起,我觉得也有道理
2019-02-25
共2条回复

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程