正则表达式

ECMAScript通过 RegExp 类型支持正则表达式。正则表达式使用类似 Perl的简洁语法来创建:

  1. let expression = /pattern/flags;

这个正则表达式的 pattern (模式)可以是任何简单或复杂的正则表 达式,包括字符类、限定符、分组、向前查找和反向引用。每个正则表达式 可以带零个或多个 flags (标记),用于控制正则表达式的行为。下面给 出了表示匹配模式的标记。

这个正则表达式的 pattern (模式)可以是任何简单或复杂的正则表 达式,包括字符类、限定符、分组、向前查找和反向引用。每个正则表达式 可以带零个或多个 flags (标记),用于控制正则表达式的行为。下面给 出了表示匹配模式的标记。

g :全局模式,表示查找字符串的全部内容,而不是找到第一个匹配 的内容就结束。
i :不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大 小写。
m :多行模式,表示查找到一行文本末尾时会继续查找。
y :粘附模式,表示只查找从 lastIndex 开始及之后的字符串。
u :Unicode模式,启用Unicode匹配。
s : dotAll 模式,表示元字符 . 匹配任何字符(包括 \n 或 \r )。

test

  1. /*
  2. new RegExp('a') 匹配规则
  3. test('abc') 匹配源 | 返回布尔值
  4. */
  5. new RegExp('a').test('abc') // true
  6. new RegExp('a').test('bcd') // false
  7. /*
  8. /.../ 是 RegExp 对象的简写,两者是等价的
  9. */
  10. /a/.test('abc') // true
  11. /a/.test('bcd') // false

exec

  1. /b/.exec('abc') // ["b", index: 1, input: "abc"]
  2. /*
  3. 返回匹配的信息
  4. [0] 匹配内容
  5. [1] 首次匹配位置
  6. [2] 匹配源
  7. */

match

  1. 'abc'.match(/a/) // ["a", index: 0, input: "abc"]
  2. /*
  3. match 和 exec 的作用是一样的,只是 match 是字符串方法,而 exec 是正则方法
  4. */

replace

  1. 'a'.replace(/\w/,'b') // b
  2. /*
  3. 替换,也是一个支持正则的字符串方法
  4. */

search

  1. 'cba'.search(/a/) // 2
  2. /*
  3. 查找字符串位置,不存在返回 -1,可以看出是一个正常正则的 indexOf
  4. */

split

  1. 'a b c'.split(/\s+/) // ['a','b','c'] | 裁剪

分组

  1. /(a)(b)/.exec('ab') // ["ab", "a", "b", index: 0, input: "ab"]
  2. 'ab'.match(/(a)(b)/) // ["ab", "a", "b", index: 0, input: "ab"]
  3. /*
  4. () 括号是特别的标示,不会影响正则匹配,括号的内容会单独返回出来,这种操作叫做分组
  5. exec 和 match 都支持分组功能
  6. */

符号

  1. /*
  2. g 全局 | 匹配多次
  3. */
  4. 'a1a'.match(/a/g) // ['a','a'] | 默认只匹配一次
  5. /*
  6. i 忽略大小写
  7. */
  8. /a/.test('A') // true
  9. /*
  10. m 多行匹配 | 即使文本换行了也能被匹配到
  11. */
  12. /^1/.test('\n1') // false
  13. /^1/m.test('\n1') // true

应用举例:
我有一个列表(在一个.txt文件),我想快速转换为JavaScript语法,
需要将其转为这样的数组格式
[“桜色”,”#bf242a”],
源文件如下:

  1. 桜色
  2. #bf242a
  3. 薄桜
  4. #fdeff2
  5. 桜鼠
  6. #e9dfe5
  7. 鸨鼠
  8. #e4d2d8
  9. 虹色
  10. #f6bfbc
  11. 珊瑚色
  12. #f5b1aa
  13. ...

使用工具notepad++
1.在notepad++中打开文件
2.ctrl+h 替换字符
3.先在开头结尾加上引号
image.png

行首
image.png
行尾

image.png

点击全部替换即可。

  1. import json
  2. li = []
  3. with open("china.json",'r',encoding='UTF-8') as load_f:
  4. #load_dict = json.load(load_f)
  5. str = load_f.read()
  6. str_li = str.replace('\n',',').split(',')
  7. n = 0
  8. strs = ""
  9. for i in str_li:
  10. n+=1
  11. strs += i+','
  12. if n == 2:
  13. li.append(strs[:-1])
  14. strs = ""
  15. n=0
  16. for i in li:
  17. print(i)

image.png

或者直接这样,四行代码搞定

  1. with open('china.txt', 'r', encoding='UTF-8') as chinacolor:
  2. asList = chinacolor.read().splitlines()
  3. for i in range(0, len(asList), 2):
  4. print("[\""+asList[i]+"\"",',',"\""+asList[i+1]+"\"]")