| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /**
- * kw
- * @author oldj
- * @blog http://oldj.net
- */
- 'use strict'
- function kw2re (kw) {
- // 模糊搜索
- let r
- let m
- let flag = []
- if (kw === '/') {
- return
- } else if ((m = kw.match(/^\/([^\/]+)\/?(\w*)$/))) {
- if (m[2].indexOf('i') > -1) {
- flag.push('i')
- }
- // if (m[2].indexOf('g') > -1) {
- flag.push('g')
- // }
- try {
- r = new RegExp(m[1], flag.join(''))
- } catch (e) {
- }
- } else if (kw.indexOf('*') > -1) {
- try {
- r = new RegExp(kw.replace(/\*/g, '.*'), 'ig')
- } catch (e) {
- }
- }
- return r
- }
- exports.findPositions = function (kw, code) {
- if (!kw || kw === '/') return []
- let r = kw2re(kw)
- if (!r) {
- try {
- r = new RegExp(kw
- .replace(/([\.\?\*\+\^\$\(\)\-\[\]\{\}])/g, '\\$1')
- , 'ig')
- } catch (e) {
- console.log(e)
- return []
- }
- }
- let indexes = []
- let lines = code.split('\n')
- lines.map((ln, idx) => {
- let match
- let max_loop = 30
- while (match = r.exec(ln)) {
- indexes.push([
- {line: idx, ch: match.index},
- {line: idx, ch: match.index + match[0].length}
- ])
- max_loop--
- if (max_loop < 0) break
- }
- })
- return indexes
- }
- exports.kw2re = kw2re
|