0%

初识Python

Python简介

Python的历史

  1. 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。
  2. 1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面又出现了Java和C#实现的版本Jython和IronPython,以及PyPy、Brython、Pyston等其他实现),可以调用C语言的库函数。在最早的版本中,Python已经提供了对“类”,“函数”,“异常处理”等构造块的支持,同时提供了“列表”和“字典”等核心数据类型,同时支持以模块为基础来构造应用程序。
  3. 1994年1月:Python 1.0正式发布。
  4. 2000年10月16日:Python 2.0发布,增加了实现完整的垃圾回收,提供了对Unicode的支持。与此同时,Python的整个开发过程更加透明,社区对开发进度的影响逐渐扩大,生态圈开始慢慢形成。
  5. 2008年12月3日:Python 3.0发布,它并不完全兼容之前的Python代码,不过因为目前还有不少公司在项目和运维中使用Python 2.x版本,所以Python 3.x的很多新特性后来也被移植到Python 2.6/2.7版本中。

目前我们使用的Python 3.7.x的版本是在2018年发布的,Python的版本号分为三段,形如A.B.C。其中A表示大版本号,一般当整体重写,或出现不向后兼容的改变时,增加A;B表示功能更新,出现新功能时增加B;C表示小的改动(例如:修复了某个Bug),只要有修改就增加C。如果对Python的历史感兴趣,可以阅读名为《Python简史》的博文。

Python的优缺点

Python的优点很多,简单的可以总结为以下几点。

  1. 简单和明确,做一件事只有一种方法。
  2. 学习曲线低,跟其他很多语言相比,Python更容易上手。
  3. 开放源代码,拥有强大的社区和生态圈。
  4. 解释型语言,天生具有平台可移植性。
  5. 支持两种主流的编程范式(面向对象编程和函数式编程)都提供了支持。
  6. 可扩展性和可嵌入性,可以调用C/C++代码,也可以在C/C++中调用Python。
  7. 代码规范程度高,可读性强,适合有代码洁癖和强迫症的人群。

Python的缺点主要集中在以下几点。

  1. 执行效率稍低,因此计算密集型任务可以由C/C++编写。
  2. 代码无法加密,但是现在很多公司都不销售卖软件而是销售服务,这个问题会被淡化。
  3. 在开发时可以选择的框架太多(如Web框架就有100多个),有选择的地方就有错误。

Python的应用领域

目前Python在Web应用开发、云基础设施、DevOps、网络爬虫开发、数据分析挖掘、机器学习等领域都有着广泛的应用,因此也产生了Web后端开发、数据接口开发、自动化运维、自动化测试、科学计算和可视化、数据分析、量化交易、机器人开发、图像识别和处理等一系列的职位。

搭建编程环境

Windows环境

可以在Python官方网站下载到Python的Windows安装程序(exe文件),需要注意的是如果在Windows 7环境下安装Python 3.x,需要先安装Service Pack 1补丁包(可以通过一些工具软件自动安装系统补丁的功能来安装),安装过程建议勾选“Add Python 3.x to PATH”(将Python 3.x添加到PATH环境变量)并选择自定义安装,在设置“Optional Features”界面最好将“pip”、“tcl/tk”、“Python test suite”等项全部勾选上。强烈建议选择自定义的安装路径并保证路径中没有中文。安装完成会看到“Setup was successful”的提示。如果稍后运行Python程序时,出现因为缺失一些动态链接库文件而导致Python解释器无法工作的问题,可以按照下面的方法加以解决。

如果系统显示api-ms-win-crt*.dll文件缺失,可以参照《api-ms-win-crt*.dll缺失原因分析和解决方法》一文讲解的方法进行处理或者直接在微软官网下载Visual C++ Redistributable for Visual Studio 2015文件进行修复;如果是因为更新Windows的DirectX之后导致某些动态链接库文件缺失问题,可以下载一个DirectX修复工具进行修复。

Linux环境

Linux环境自带了Python 2.x版本,但是如果要更新到3.x的版本,可以在Python的官方网站下载Python的源代码并通过源代码构建安装的方式进行安装,具体的步骤如下所示。

安装依赖库(因为没有这些依赖库可能在源代码构件安装时因为缺失底层依赖库而失败)。

1
yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

下载Python源代码并解压缩到指定目录。

1
2
3
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
xz -d Python-3.7.3.tar.xz
tar -xvf Python-3.7.3.tar

切换至Python源代码目录并执行下面的命令进行配置和安装。

1
2
3
cd Python-3.7.3
./configure --prefix=/usr/local/python37 --enable-optimizations
make && make install

修改用户主目录下名为.bash_profile的文件,配置PATH环境变量并使其生效。

1
2
cd ~
vim .bash_profile
1
2
3
4
5
# ... 此处省略上面的代码 ...

export PATH=$PATH:/usr/local/python37/bin

# ... 此处省略下面的代码 ...

激活环境变量。

1
source .bash_profile

macOS环境

macOS也自带了Python 2.x版本,可以通过Python的官方网站提供的安装文件(pkg文件)安装Python 3.x的版本。默认安装完成后,可以通过在终端执行python命令来启动2.x版本的Python解释器,可以通过执行python3命令来启动3.x版本的Python解释器。

从终端运行Python程序

确认Python的版本

可以Windows的命令行提示符中键入下面的命令。

1
python --version

或者是在Linux或macOS系统的终端中键入下面的命令。

1
python3 --version

当然也可以先输入python或python3进入交互式环境,再执行以下的代码检查Python的版本。

1
2
3
4
import sys

print(sys.version_info)
print(sys.version)

编写Python源代码

可以用文本编辑工具(推荐使用SublimeAtomVisual Studio Code等高级文本编辑工具)编写Python源代码并用py作为后缀名保存该文件,代码内容如下所示。

1
print('hello, world!')

运行程序

切换到源代码所在的目录并执行下面的命令,看看屏幕上是否输出了”hello, world!”。

1
python hello.py

1
python3 hello.py

代码中的注释

注释是编程语言的一个重要组成部分,用于在源代码中解释代码的作用从而增强程序的可读性和可维护性,当然也可以将源代码中不需要参与运行的代码段通过注释来去掉,这一点在调试程序的时候经常用到。注释在随源代码进入预处理器或编译时会被移除,不会在目标代码中保留也不会影响程序的执行结果。

  1. 单行注释 - 以#和空格开头的部分
  2. 多行注释 - 三个引号开头,三个引号结尾
1
2
3
4
5
6
7
8
9
10
11
12
13
"""
第一个Python程序 - hello, world!
向伟大的Dennis M. Ritchie先生致敬

Version: 0.1
Author: 骆昊
"""

print('hello, world!')
# print("你好,世界!")
print('你好', '世界')
print('hello', 'world', sep=', ', end='!')
print('goodbye, world', end='!\n')

其他工具介绍

IDLE - 自带的集成开发工具

IDLE是安装Python环境时自带的集成开发工具,如下图所示。但是由于IDLE的用户体验并不是那么好所以很少在实际开发中被采用。

IPython - 更好的交互式编程工具

IPython是一种基于Python的交互式解释器。相较于原生的Python交互式环境,IPython提供了更为强大的编辑和交互功能。可以通过Python的包管理工具pip安装IPython和Jupyter,具体的操作如下所示。

1
pip install ipython

1
pip3 install ipython

安装成功后,可以通过下面的ipython命令启动IPython,如下图所示。

当然,我们也可以通过安装Jupyter工具并运行名为notebook的程序在浏览器窗口中进行交互式代码编写操作。

1
pip install jupyter

1
pip3 intall jupyter

然后执行下面的命令:

1
jupyter notebook

Sublime / Visual Studio Code - 高级文本编辑器

  • 首先可以通过官方网站下载安装程序安装Sublime 3或Sublime 2。

  • 安装包管理工具。

    1. 通过快捷键Ctrl+`或者在View菜单中选择Show Console打开控制台,输入下面的代码。
    • Sublime 3
    1
    import  urllib.request,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
    • Sublime 2
    1
    import  urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp)ifnotos.path.exists(ipp)elseNone;urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read());print('Please restart Sublime Text to finish installation')
    1. 手动安装浏览器输入 https://sublime.wbond.net/Package%20Control.sublime-package 下载这个文件
      下载好以后,打开sublime text,选择菜单Preferences->Browse Packages… 打开安装目录
      此时会进入到一个叫做Packages的目录下,点击进入上一层目录Sublime Text3,在此目录下有一个文件夹叫做Installed Packages,把刚才下载的文件放到这里就可以了。然后重启sublime text3,观察Preferences菜单最下边是否有Package Settings 和Package Control两个选项,如果有,则代表安装成功了。
  • 安装插件。通过Preference菜单的Package Control或快捷键Ctrl+Shift+P打开命令面板,在面板中输入Install Package就可以找到安装插件的工具,然后再查找需要的插件。我们推荐大家安装以下几个插件:

    • SublimeCodeIntel - 代码自动补全工具插件。
    • Emmet - 前端开发代码模板插件。
    • Git - 版本控制工具插件。
    • Python PEP8 Autoformat - PEP8规范自动格式化插件。
    • ConvertToUTF8 - 将本地编码转换为UTF-8。

说明:事实上Visual Studio Code可能是更好的选择,它不用花钱并提供了更为完整和强大的功能,有兴趣的读者可以自行研究。

PyCharm - Python开发神器

PyCharm的安装、配置和使用在《玩转PyCharm》进行了介绍,有兴趣的读者可以选择阅读。

练习

  1. 在Python交互环境中查看下面的代码结果,并试着将这些内容翻译成中文。

    1
    import this

    说明:当前键入上面的命令后会在交互式环境中看到如下所示的输出,这段内容被称为“Python之禅”,里面讲述的道理不仅仅适用于Python,也适用于其他编程语言。

  2. 学习使用turtle在屏幕上绘制图形。

    说明:turtle是Python内置的一个非常有趣的模块,特别适用于让小朋友体会什么是编程,它最早是Logo语言的一部分,Logo语言是Wally Feurzig和Seymour Papert在1966发明的编程语言.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import turtle

    turtle.pensize(4)
    turtle.pencolor('red')
    turtle.forward(100)
    turtle.right(90)
    turtle.forward(100)
    turtle.right(90)
    turtle.forward(100)
    turtle.right(90)
    turtle.forward(100)
    turtle.mainloop()

说明

下面是time的应用,另外datetime中也有对时间的处理

距离1970年01月01日的时间差

import time;  # 引入time模块

ticks = time.time()
print "当前时间戳为:", ticks

获取当地时间元组

localtime = time.localtime(time.time())
print "本地时间为 :", localtime
#time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7,tm_hour=10,
    tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98,tm_isdst=0)

获取格式化的时间

localtime = time.asctime( time.localtime(time.time()) )
print "本地时间为 :", localtime
#本地时间为 : Thu Apr  7 10:05:21 2016

格式化日期

# 格式化成2016-03-20 11:45:39形式
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 

# 格式化成Sat Mar 28 22:24:24 2016形式
print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) 

# 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

数字(int,long,float浮点型,complex复数)

var1 = 1
var2 = 12345L
var3 = 0.0
var4 = 9.322e-36j

int(s) #字符串转int,long、float、complex同

数学函数(自带+第三方+随机数+三角函数)

Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中。
Python math 模块提供了许多对浮点数的数学运算函数。
Python cmath 模块包含了一些用于复数运算的函数。

字符串

str = 'X u G u o z h o n g'
       0 1 2 3 4 5 6 7 8 9
                    -3-2-1
str
str[-2] # n
str[1:3] # uGu
str[7:] # ong

str(x) #转字符串类型,同repr(x)
eval(str) #将字符串转换为代码执行

转义字符 \

行尾表示续行符,其他地方表示转义,例如\n表示换行

字符串格式化

print "My name is %s and weight is %d kg!" % ('Zara', 21) 

内建函数

string.format()
string.strip([obj]) #在 string 上执行 lstrip()和 rstrip()

列表

list = [ 'xgz', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'frank']
print list               # 输出完整列表
print list[0]            # 输出列表的第一个元素
print list[1:3]          # 输出第二个至第三个元素 
print list[2:]           # 输出从第三个开始至列表末尾的所有元素
print tinylist * 2       # 输出列表两次
print list + tinylist    # 打印组合的列表

list(s) #转化为列表
set() 函数创建一个无序不重复元素集

添加及删除

list.append('Google')   ## 使用 append() 添加元素
del list[2] #删除

求长度

len(list)

元组

就是把列表的[]变成()同时变为只读列表
tuple(s)

字典

dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


​ print dict[‘one’] # 输出键为’one’ 的值
​ print dict[2] # 输出键为 2 的值
​ print tinydict # 输出完整的字典
​ print tinydict.keys() # 输出所有键
​ print tinydict.values() # 输出所有值

​ dict(d) #创建一个字典。d 必须是一个序列 (key,value)元组。

修改及删除字典

dict['Age'] = 8;  # 更新
del dict['Name']; # 删除键是'Name'的条目
dict.clear();     # 清空词典所有条目
del dict ;        # 删除词典

求长度

len(dict)

成员运算符

in
not in

身份运算符

is
is not

一些匹配方法

去除首尾的

1
2
//去除首尾的‘/’
input = input.replace(/^\/*|\/*$/g,'');

javascript:; 、javascript:void(0)

1
2
'javascript:;'.match(/^(javascript\s*\:|#)/);
//["javascript:", "javascript:", index: 0, input: "javascript:;"]

匹配

1
2
3
var str = "access_token=dcb90862-29fb-4b03-93ff-5f0a8f546250; refresh_token=702f4815-a0ff-456c-82ce-24e4d7d619e6; account_uid=1361177947320160506170322436";
str.match(/account_uid=([^\=]+(\;)|(.*))/ig);
//=> ["account_uid=1361177947320160506170322436"]

匹配一些字符

1
2
3
var str = 'asdf html-webpack-plugin for "index/index.html" asdfasdf';
str.match(/html-webpack-plugin for \"(.*)\"/ig);
console.log(RegExp.$1) //=>index/index.html

关键字符替换

1
2
'css/[hash:8].index-index.css'.replace(/\[(?:(\w+):)?(contenthash|hash)(?::([a-z]+\d*))?(?::(\d+))?\]/ig,'(.*)');
//=> css/(.*).index-index.css

替换参数中的值

1
2
3
4
5
6
7
8
9
var str  = '<!DOCTYPE html><html manifest="../../cache.manifest" lang="en"><head><meta charset="UTF-8">';
str.replace(/<html[^>]*manifest="([^"]*)"[^>]*>/,function(word){
return word.replace(/manifest="([^"]*)"/,'manifest="'+url+'"');
}).replace(/<html(\s?[^\>]*\>)/,function(word){
if(word.indexOf('manifest')) return word;
return word.replace('<html','<html manifest="'+url+'"');
});
//原:<!DOCTYPE html><html manifest="../../cache.manifest" lang="en"><head><meta charset="UTF-8">
//替换成=> <!DOCTYPE html><html manifest="cache.manifest" lang="en"><head><meta charset="UTF-8">

匹配括号内容

1
2
3
4
'max_length(12)'.match(/^(.+?)\((.+)\)$/)
// ["max_length(12)", "max_length", "12", index: 0, input: "max_length(12)"]
'hello(world)code(js)javascirpt'.match(/\((\w*)+?\)/gmi);
// => ["(world)", "(js)"]

调换

1
2
3
var name = "Doe, John"; 
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
//=> "John Doe"

字符串截取

1
2
3
4
var str = 'asfdf === sdfaf ##'
str.match(/[^===]+(?=[===])/g) // 截取 ===之前的内容

str.replace(/\n/g,'') // 替换字符串中的 \n 换行字符

浏览器版本

1
2
navigator.userAgent.match(/chrome\/([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)/i);
//=> ["Chrome/64.0.3282.167", "64", "0", "3282", "167", index: 87, input: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) Ap…L, like Gecko) Chrome/64.0.3282.167 Safari/537.36"]

验证

小数点后几位验证

1
2
3
4
5
// 精确到1位小数
/^[1-9][0-9]*$|^[1-9][0-9]*\.[0-9]$|^0\.[0-9]$/.test(1.2);

// 精确到2位小数
/^[0-9]+(.[0-9]{2})?$/.test(1.221);

密码强度正则

1
2
3
4
5
// 必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/.test("weeeeeeeW2");
//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/.test("diaoD123#");
//输出 true

校验中文

1
2
3
/^[\u4e00-\u9fa5]{0,}$/.test("但是d"); //false
/^[\u4e00-\u9fa5]{0,}$/.test("但是"); //true
/^[\u4e00-\u9fa5]{0,}$/.test("但是"); //true

包含中文正则

1
/[\u4E00-\u9FA5]/.test("但是d") //true

由数字、26个英文字母或下划线组成的字符串

1
/^\w+$/.test("ds2_@#"); // false

身份证号正则

1
2
3
//身份证号(18位)正则
/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test("42112319870115371X");
//输出 false

校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//日期正则,简单判定,未做月份及日期的判定
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
//输出 true
console.log(dP1.test("2017-05-11"));
//输出 true
console.log(dP1.test("2017-15-11"));
//日期正则,复杂判定
var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
//输出 false
console.log(dP2.test("2017-02-29"));
// true

校验文件后缀

1
2
3
4
5
6
7
  var strRegex = "(.jpg|.gif|.txt)";
var re=new RegExp(strRegex);
if (re.test(str)){

}
/(.jpg|.gif)+(\?|\#|$)/.test('a/b/c.jpgsss'); //=> false
/(.jpg|.gif)+(\?|\#|$)/.test('a/b/c.jpg?'); //=> true

用户名正则

1
2
3
//用户名正则,4到16位(字母,数字,下划线,减号)
/^[a-zA-Z0-9_-]{4,16}$/.test("diaodiao");
//输出 true

整数正则

1
2
3
4
5
6
7
/^\d+$/.test("42");    //正整数正则  -> 输出 true
/^-\d+$/.test("-42"); //负整数正则 -> 输出 true
/^-?\d+$/.test("-42"); //整数正则 -> 输出 true

/^[0-9]+$/.test(25.5455) //正整数正则 -> 输出 false
// 浮点数
/^(?:[-+])?(?:[0-9]+)?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/.test(0.2)

数字正则

可以是整数也可以是浮点数

1
2
3
/^\d*\.?\d+$/.test("42.2");     //正数正则  -> 输出 true
/^-\d*\.?\d+$/.test("-42.2"); //负数正则 -> 输出 true
/^-?\d*\.?\d+$/.test("-42.2"); //数字正则 -> 输出 true

Email正则

1
2
3
4
5
6
7
8
9
10
11
//Email正则
/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test("wowohoo@qq.com");
//输出 true

// 1.邮箱以a-z、A-Z、0-9开头,最小长度为1.
// 2.如果左侧部分包含-、_、.则这些特殊符号的前面必须包一位数字或字母。
// 3.@符号是必填项
// 4.右则部分可分为两部分,第一部分为邮件提供商域名地址,第二部分为域名后缀,现已知的最短为2位。
// 最长的为6为。
// 5.邮件提供商域可以包含特殊字符-、_、.
/^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test("wowohoo@qq.com");

传真号码

1
2
// 国家代码(2到3位)-区号(2到3位)-电话号码(7到8位)-分机号(3位)
/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/.test('021-5055455')

手机号码正则

1
2
3
4
5
6
7
8
9
10
11
//手机号正则
/^1[34578]\d{9}$/.test("13611778887");
//输出 true

//* 13段:130、131、132、133、134、135、136、137、138、139
//* 14段:145、147
//* 15段:150、151、152、153、155、156、157、158、159
//* 17段:170、176、177、178
//* 18段:180、181、182、183、184、185、186、187、188、189
//* 国际码 如:中国(+86)
/^((\+?[0-9]{1,4})|(\(\+86\)))?(13[0-9]|14[57]|15[012356789]|17[03678]|18[0-9])\d{8}$/.test("13611778887");

URL正则

1
2
3
4
5
6
7
8
9
10
11
//URL正则
/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test("http://wangchujiang.com");
//输出 true

//获取url中域名、协议正则 'http://xxx.xx/xxx','https://xxx.xx/xxx','//xxx.xx/xxx'
/^(http(?:|s)\:)*\/\/([^\/]+)/.test("http://www.baidu.com");

/^((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)|)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/.test('https://www.baidu.com/s?wd=@#%$^&%$#')

// 必须有协议
/^[a-zA-Z]+:\/\//.test("http://www.baidu.com");

域名正则表达式

1
2
/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/.test('blog.csdn.net');
// 输出 true

Mac地址匹配

1
2
/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/.test('dc:a9:04:77:37:20');
// 输出 true

浮点数正则表达式

1
2
/[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?/.test(+334.4443434343e3);
//输出 true

IPv4地址正则

1
2
3
//ipv4地址正则
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test("192.168.130.199");
//输出 true

日期格式化yyyy-MM-dd正则

1
2
/(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])/.test('2019-09-12')
//输出 true

十六进制颜色正则

1
2
3
//RGB Hex颜色正则
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/.test("#b8b8b8");
//输出 true

QQ号码正则

1
2
//QQ号正则,5至11位
/^[1-9][0-9]{4,10}$/.test("398188661");//输出 true

微信号正则

1
2
//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/.test("jslite"); //输出 true

车牌号正则

1
2
//车牌号正则
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/.test("沪B99116") //输出 true

颜色值校验

1
2
// HEX 颜色正则
/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test("#ccb2b2")

工具

图片

布局

  • SuperEmbed.js - 是一个Javascript库,可检测出网页上的内嵌视频并使他们能够变成响应式元素。demo
  • ScrollReveal - ScrollReveal插件使用户能够无比轻松地创建桌面和移动浏览器的网页滚动动画。demo
  • Bricks.js - 是一款超快的用于固定宽度元素的“砖石”布局生成器。demo

轮播图

  • Swipe - 准确的触摸滑块。demo
  • Lory - 是一个由 Vanilla JavaScript 编写的拥有触摸功能的简约滑块。demo
  • baguetteBox.js - 是一个简单、易用的响应式 Lightbox 图片库,它支持移动端上触滑动手势操作,无依赖。demo

弹出层

  • Popper.js - 是一个轻量级的库用于管理工具提示和弹窗效果。demo
  • SweetAlert2 - 是一个颜值很高而且可以自定义的警告弹出窗口插件,可以代替Javascript的弹出窗口。demo
  • artDialog - 是一个经典、优雅的网页对话框控件。demo
  • layer - 是一个web弹层组件。demo

音频视频

  • Loud Links - 是一个轻量级的JavaScript库用于添加交互声音到您的站点。demo
  • flv.js - B 站 HTML5 播放器内核开源。
  • Loud Links - 是一个轻量级 JavaScript 库,用于向您的网站添加交互音频。。demo

编辑器

  • MediumEditor - 仿Medium.com的所见即所得在线编辑器工具栏。demo
  • Substance - 是一个基于Web的内容自定义编辑器。demo
  • flatpickr - 是一个轻量级的代码高亮库,适用于任何编程语言。demo
  • pen - 是一个Markdown编辑器工具。demo
  • aceAce(Ajax.org Cloud9 Editor)。demo
  • CodeMirror浏览器端的代码编辑器。demo
  • esprima用于综合分析的 ECMAScript 解析器。demo
  • quill一个带有 API 的跨浏览器富文本编辑器。(demo)
  • ckeditor-releases 适用于每个人的 web 文本编辑器。demo
  • editor 一个 markdown 编辑器,但仍在开发中。demo
  • EpicEditor 一个可嵌入的 js Markdown的编辑器,拥有全屏编辑、即时预览、自动保存草稿和离线支持等功能。demo
  • jsoneditor 查看、编辑和格式化 JSON 的 web 工具。demo
  • vim.js 拥有持久化 ~/.vimrc 的 Vim 编辑器的 JavaScript 移植版本。demo
  • Squire HTML5 富文本编辑器。demo
  • TinyMCE JavaScript 富文本编辑器。demo
  • trix 由 Basecamp 制作,适用于每天写作的富文本编辑器。demo
  • Editor.md 由 Basecamp 制作,适用于每天写作的富文本编辑器。demo

字符串

  • selecting - 一个允许你获取用户选定文本的库。
  • string.js - 额外的 JavaScript 字符串方法。demo
  • he - 健壮的 HTML 实体编码/解码器。
  • multiline - 多行字符串。
  • query-string - 解析和字符串化 URL 查询字符串。
  • URI.js - URL 操作库。demo
  • jsurl - 轻量的 URL 操作库。
  • sprintf.js - 实现字符串格式化。
  • url-pattern - 让 url 和其它字符串进行比正则表达式匹配更简单。字符串和数据可相互转化。
  • Numeral.js - 格式化和操作数字的 JS 库。 demo

表单

  • validator.js - 轻量级的JavaScript表单验证,字符串验证。demo
  • List.js - 是一个轻量级的为列表、表格或其他任何HTMLL标签增加了搜索,排序,过滤器和灵活性等元素。demo
  • Algolia Places - 是一个能让你在网页轻易实现搜索栏自动完成功能。demo
  • Cleave.js - 是一个会在你输入时格式化你的<input/>标签里面的内容。demo
  • validator.js - 是一个简单、轻量级,但功能强大的 Validator 组件。demo
  • axios - 是一个基于浏览器和node的HTTP请求库,绿色环保只有12kb。

存储

  • store.js - 本地存储localstorage的封装,提供简单的API。demo
  • cookie.js - 对操作cookie的封装,提供简单的AIP 兼容IE6。demo
  • store.js - 为所有浏览器封装了LocalStorage,隐秘地使用localStorage、globalStorage和用户数据。
  • localForage - 改善后的离线存储。封装了IndexedDB、WebSQL和localStorage。demo
  • cross-storage - 获得权限后,能跨域名本地存储。
  • basket.js - 用 localStorage 加载和缓存脚本的资源加载器。demo
  • bag.js - 可以缓存脚本和加载资源,增加了键值对接口和对localStorage/websql/indexedDB 的支持。
  • basil.js - 智能的 JavaScript 数据持久层库。
  • Cookies - 客户端 Cookie 操作库。
  • DB.js - 基于 Promise 的、封装了 IndexedDB 的库。demo
  • lawnchair.js - 简单的客户端 JSON 存储。demo

动画

  • anime.js - 是一个灵活轻便的JavaScript动画库。demo
  • three.js - 是一个JS 3D库。demo
  • loaders.css - CSS 动画加载效果。demo
  • Hover.css - 一款基于 CSS3 的悬停特效合集。demo
  • Effeckt.css - 一个包含众多精妙的 CSS3 切换和动画效果库。demo
  • Magic Animations - 一个独特的 CSS3 动画特效包。demo
  • Transformicons - 一个结合 SVG、CSS 和 HTML 技术,让图标、按钮和符号具有变种(特殊)动画效果的库。demo
  • SpinKit - 一款 CSS 加载动画合集,可高度自定义动画效果。demo
  • d3-ease - 这是一个让动画更为平滑的 Easing 库。
  • ScrollMagic - 一个用来创建魔幻滚动交互的 JavaScript 库,可以像使用进度条一样使用滚动条。demo
  • ScrollReveal - 一款页面滚动显示动画,可以播放一次也可以播放无限次,能让页面更加有趣,更吸引用户眼球。。demo
  • RELLAX.js - 是一款主打轻量级的纯 JavaScript 视差效果库。demo
  • CountUp.js - 可以用来快速创建以一种更有趣的动画方式显示数值数据。demo
  • Dynamics.js - 可以创建物理运动动画效果 JavaScript 库。demo
  • Mojs - 一个拥有极简的声明式 API ,能够轻松掌控运动轨迹,为运动图形而生的工具库。demo
  • React FLIP Move - 一个翻转移动的库,旨在解决当列表的顺序发生变化时,项目列表动画化的问题。demo
  • tween.js - 是一个JS 平滑动画库。demo
  • Typed.js - 是一个JS 打字动画库。demo
  • vivus - JavaScript库,使SVG绘制动画。demo
  • Choreographer-js - 是一个用于处理复杂动画的简单库。demo
  • minirefresh - 优雅的H5下拉刷新。零依赖。demo

时间

  • Day.js - 是一个轻量的 JavaScript 时间日期处理库。
  • dayjs 只有2KB日期库,替代Moment.js,具有相同的现代API。
  • moment - 是一个日期处理类库,用于解析、检验、操作、以及显示日期。demo
  • date-fns - 现代JavaScript日期实用程序库。demo
  • luxon - 在JS中使用日期和时间的库。demo
  • timesheet.js - 是一个时间展示片段插件。demo
  • date.js - 是一个格式化时间、过去时间展示、解决因时区变更插件。
  • timeago.js - 格式化时间显示多久以前的插件。 demo
  • rome - 可定制的日期(和时间)选择器。无依赖,可选 UI。 demo
  • moment-timezone - 基于 moment.js 的时区库。demo
  • date - 拥有人性化的 Date() 方法。demo
  • ms.js - 小巧的毫秒转换工具。

其它

  • hotkeys - 是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键。demo
  • isMobile - 一个检测移动设备的简单JS库。
  • clipboard.js - 现代复制到剪贴板。没有Flash,gzip压缩只有3KB 。demo
  • translater.js - 这是一个利用HTML注释的页面翻译解决方案。demo
  • scrollama - 为 Scrollytelling 开发的现代、轻量级的 JavaScript 库。demo
  • Push.js - 是一个跨浏览器的Javascript桌面通知插件。demo
  • onlinenetwork - js判断是否断网了。
  • iNotify - 是一个实现浏览器的 title 闪烁、滚动、声音提示、chrome、等系统通知。demo
  • tesseract.js - 是一个文字识别转换,可以运行在浏览器和服务器NodeJS上。demo
  • Leaflet.js - 是一个开源的移动友好交互式地图 JavaScript 库。体积仅有 33 KB。demo
  • CurrencyFormatter.js - 是一款简单纯JS格式化155种不同国家货币格式库,gzip压缩后仅7KB。demo
  • Feature.js - 是一个快速、简单、轻量级的浏览器功能检测库。它没有任何的依赖,并且 gzip 压缩后仅有1kb。demo
  • screenfull.js - 极小、跨平台的 JavaScript 全屏插件。demo

图表

  • TOAST UI Chart - 提供了直方图、折线图、散点图、饼图、热力图等多种类型格式的图表,兼容 IE8+ demo
  • Chart.js - Simple HTML5 Charts using the <canvas> tag demo
  • ECharts - A powerful, interactive charting and visualization library for browser demo
  • D3 - Bring data to life with SVG, Canvas and HTML. demo
  • Frappe Charts - Bring data to life with SVG, Canvas and HTML. demo
  • Chartist.js - Simple responsive charts. demo
  • Recharts - Simple responsive charts. demo

加载器

  • requirejs - JS模块化工具
  • SeaJS - JavaScript模块加载框架
  • loadjs - JavaScript模块加载框架
  • ESL - 浏览器端AMD标准加载器

构建工具

测试

  • mocha - JavaScript 测试框架
  • ESLint - JavaScript代码检查工具
  • JSHint - JavaScript语法和风格检查工具
  • casperjs - 开源的导航脚本处理和测试工具
  • Nightwatch - 用户界面自动化测试框架
  • istanbul - JS代码覆盖工具
  • intern - JavaScript测试系统
  • benchmark.js - 强大的JavaScript基准库
  • loadtest - HTTP或WebSockets URL的负载测试
  • JSCover - JavaScript代码覆盖测量工具

包管理器

  • yarn - 新的 Hadoop 资源管理器
  • bower - web包管理器
  • npm - NodeJS包安装的管理模块
  • ndm - npm桌面管理器

CDN