首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个分隔符之间查找两个字符的Javascript正则表达式

问在两个分隔符之间查找两个字符的Javascript正则表达式
EN

Stack Overflow用户
提问于 2021-12-15 12:06:00
回答 1查看 68关注 0票数 2

编辑的

我需要使用Javascript在‘和'/’/‘之间找到两个字符。

我用的是这个正则表达式:

代码语言:javascript
复制
  ([^.][/[string]]|\/string\/)|(\[(string))|(\/(string))| ((string)\])|((string)\/)

那会得到两个字符,但也会得到一个字符。

问题是,我怎样才能得到两个角色呢?

我还想得到字符串中的两个字符,我的意思是不仅仅是精确的匹配。

例如:

用户输入: dz它必须找到包含"dz“的精确匹配,例如-> "dzone”,而不是"dazone“。目前,我得到了两个字符串的匹配,"dzone“和"dazone”。

演示: https://regex101.com/r/FEs6ib/1

EN

回答 1

Stack Overflow用户

发布于 2021-12-15 12:27:29

您可以选择性地重复除分隔符之外的任何字符,它们之间的分隔符是自定义的,并在一组中捕获您想要保留的内容。

如果希望对/dzone/dzone/进行多个匹配,则可以将最后一个分隔符断言到右侧,而不是匹配它。

匹配在第1组或第2组中,您可以在其中检查它们是否存在。

代码语言:javascript
复制
\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])

模式匹配:

  • \/匹配/
  • [^\/]*(dz)[^\/]*捕获组1中的dz ( /以外的可选字符之间的)
  • (?=\/)正向前看,向右断言/
  • |或
  • \[匹配[
  • [^\][]*(dz)[^\][]*捕获组2中的dz ( [和] -(?=])正向前瞻之外的可选字符之间的),向右断言]。

Regex演示

这将匹配单词中dz的1次出现。如果要匹配整个单词,可以将捕获组扩展到否定字符类之前和之后,例如:

代码语言:javascript
复制
\/([^\/]*dz[^\/]*)(?=\/)|\[([^\][]*dz[^\][]*)(?=])

Regex演示

​

代码语言:javascript
复制
const regex = /\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])/g;
[
  "[dzone]",
  "/dzone/",
  "/dzone/dzone/",
  "/testdztest/",
  "[dazone]",
  "/dazone/",
  "dzone",
  "dazone"
].forEach(s =>
  console.log(
    `${s} --> ${Array.from(s.matchAll(regex), m => m[2] ? m[2] : m[1])}`
  )
);

​

如果受支持,还可以使用无限量词匹配分隔符之间所有出现的dz:

代码语言:javascript
复制
(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])

Regex演示

​

代码语言:javascript
复制
const regex = /(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])/g;
[
  "[adzadzone]",
  "[dzone]",
  "/dzone/",
  "/dzone/dzone/",
  "/testdztest/",
  "[dazone]",
  "/dazone/",
  "dzone",
  "dazone"
].forEach(s => {
  const m = s.match(regex);
  if (m) {
    console.log(`${s} --> ${s.match(regex)}`);
  }
});

​

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70363413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档