【问题标题】:Javascript regex to find two characters between two delimitatorsJavascript正则表达式在两个分隔符之间查找两个字符
【发布时间】:2022-01-18 14:56:54
【问题描述】:

已编辑

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

我正在使用这个正则表达式:

  ([^.][/[string]]|\/string\/)|(\[(string))|(\/(string))| ((string)\])|((string)\/)

得到两个字符但得到一个字符。

问题是,我怎样才能只得到两个字符?

我也想得到字符串中的两个字符,我的意思不仅仅是完全匹配。

例如。

用户输入:dz 它必须找到包含“dz”的完全匹配,例如--> "dzone" 但不是 "dazone"。目前,我正在与两个字符串“dzone”和“dazone”匹配。

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

【问题讨论】:

  • 请编辑您的问题,添加示例、输入案例和所需的输出
  • [^.][/[a]] 应该匹配什么?还有,匹配a的目的是什么?删除/替换/拆分?
  • 如果要替换,text.replace(/\/[^\/]*\/|\[[^\][]*]/g, (m) => m.replace(/a/g, '')) 可能会是一个更易于理解的解决方案。 (或者,/\/[^\/\][]*\/|\[[^\/\][]*]/g)。或者,也许您只想要/\/a\/|\[a]/g
  • 已编辑。我需要使用正则表达式在字符串中查找两个字符,但我不知道我做错了什么

标签: javascript regex typescript


【解决方案1】:

您可以选择重复任何字符,除了分隔符之间的分隔符,并在一个组中捕获您想要保留的内容。

如果您希望/dzone/dzone/ 有多个匹配项,您可以断言右边的最后一个分隔符而不是匹配它。

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

\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])

模式匹配:

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

Regex demo

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

\/([^\/]*dz[^\/]*)(?=\/)|\[([^\][]*dz[^\][]*)(?=])

Regex demo

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

(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])

Regex demo

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)}`);
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多