ES2018新增加的一些东西

1,命名捕获

语法: (?<名字>)

先来看一个原来的捕获正则;

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
</body>
<script>
  let str = '2018-03-20';
  let reg = /(\d{4})-(\d{2})-(\d{2})/;
  let dateArr = str.match(reg);
  console.log(dateArr);
  let year = dateArr[1];
  let mouth = dateArr[2];
  let day = dateArr[3];
  console.log(year, mouth, day);
</script>
</script>
</script>
</html>

这是用数组下标的方法来调出匹配项,现在也可以使用命名的方法:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
</body>
<script>
  let str = '2018-03-20';
  let reg = /(?<year>\d{4})-(?<mouth>\d{2})-(?<day>\d{2})/;
  let dateArr = str.match(reg);
  console.log(dateArr);
  console.log(dateArr.groups);
  let {year, mouth, day} = dateArr.groups;
  console.log(year, mouth, day);
</script>
</script>
</script>
</html>

原来的反向引用:

\1  \2   $1  $2

反向引用命名捕获:

语法:\k<名字>

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
</body>
<script>
  let reg = /^(?<str>welcome)-\k<str>$/;
  console.log(reg.test('a-a'));
  console.log(reg.test('RESWORD-RESWORD'));
  console.log(reg.test('welcome-RESWORD'));
  console.log(reg.test('welcome-welcome'));
</script>
</script>
</script>
</html>

当然原来的反向引用也可以用在命名捕获上

也是一样的结果

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
</body>
<script>
  let str = '2018-03-20';
  let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
  str = str.replace(reg, '$<day>/$<month>/$<year>');
  console.log(str);
</script>
</script>
</script>
</html>

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
</body>
<script>
  let str = '2018-03-20';
  let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
  str = str.replace(reg, (...argus) => {
    let {year, month, day} = argus[argus.length - 1];
    return `${day}/${month}/${year}`;
  });
  console.log(str);
</script>
</script>
</script>
</html>

2,dotAll模式:

在之前的的正则表达式中虽然 . 代表匹配任意东西,但是不包括\n ,这就有点麻烦了,一般我们都是加上m,现在也可以加上s,表示 . 匹配任意东西,包括换行,

3,标签函数

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
</body>
<script>
  function fun(args) {
    console.log(args);
  }
  // fun();正常函数的调用
  console.log(fun`welcome`);//标签函数的调用
</script>
</script>
</script>
</html>

变换成大写字母

### 如何使用Python与Elasticsearch交互 #### 安装Elasticsearch客户端库 为了能够顺利地在Python环境中与Elasticsearch进行通信,首先需要安装官方提供的`elasticsearch-py`客户端库。可以通过pip工具轻松完成这一过程: ```bash pip install elasticsearch ``` 此命令会自动下载并安装最版本的Elasticsearch Python客户端[^4]。 #### 创建连接对象 建立到Elasticsearch集群的连接是执行任何操作的前提条件之一。下面是一段用于初始化Elasticsearch类实例来代表这种连接关系的基础代码片段: ```python from elasticsearch import Elasticsearch es_client = Elasticsearch( "http://localhost:9200", # 替换成自己的ES服务地址 request_timeout=30 # 设置请求超时时间 ) if not es_client.ping(): raise ValueError("Connection failed") print('Connected to ES') ``` 这段脚本不仅实现了基本链接设置还包含了简单的健康状态检测逻辑以确保成功建立了有效的网络通道[^1]。 #### 构建索引结构 定义好目标存储空间即索引之后才能继续后续的数据管理动作。这里给出了一种方式用来声明一个的索引模式及其映射规则: ```json index_settings = { 'settings': { 'number_of_shards': 1, 'number_of_replicas': 0 }, 'mappings': { 'properties': { 'title': {'type': 'text'}, 'content': {'type': 'text'} } } } response = es_client.indices.create(index='test-index', body=index_settings, ignore=[400]) print(response) ``` 上述JSON格式的对象描述了一个名为`test-index`的索引,并指定了其中两个字段(`title`, `content`)均为文本类型的属性配置信息[^3]。 #### 插入单条记录 当准备好接收数据后就可以考虑怎样把它们送进去保存起来了。此处展示的是向指定位置写入一条具体消息的方法: ```python doc = { 'author': 'John Doe', 'text': 'Interesting content...', 'timestamp': datetime.now(), } res = es_client.index(index="test-index", id=1, document=doc) print(res['result']) ``` 该函数调用将会尝试将给定字典形式的内容作为编号为1的文章存放到之前创建好的测试索引里去[^2]。 #### 执行搜索查询 检索已有的资料无疑是数据库最核心的功能点了。下面的例子说明了如何构建一个简易版全文搜索引擎来进行关键词匹配查找工作: ```python query_body = {"size": 5,"_source": ["title"],"query":{"match_all":{}}} resp = es_client.search(index="test-index", body=query_body) for hit in resp['hits']['hits']: print(hit["_source"]) ``` 这个例子中构造了一个只返回前五个结果并且仅显示标题部分的小规模搜索请求体;当然也可以根据需求调整参数来自定义更复杂的过滤表达式。 #### 更现有文档 有时候可能需要修改已经存在的某些项的信息而不必重上传整个文件。这时可以采用如下所示的方式针对特定ID对应的实体做局部改动: ```python update_body = {"doc": {"new_field": "This is a new field"}} res = es_client.update(index="test-index", id=1, body=update_body) print(res['result']) ``` 这条语句会在保持其他不变的情况下增加一个叫作`new_field`的关键值对至id等于1的那个节点上。 #### 删除不再需要的数据 清理过期无用的东西有助于维持系统的整洁有序。如果想要移除某篇帖子的话只需简单几行就能搞定: ```python res = es_client.delete(index="test-index", id=1) print(res['result']) ``` 这一步骤彻底清除了关联着数字标识符1的那一份材料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值