【问题标题】:get the string between starting character(s) and ending character(s)获取起始字符和结束字符之间的字符串
【发布时间】:2021-03-23 07:29:08
【问题描述】:

下面我给出了一个简单的字符串。它就像示例字符串,模式可能保持不变,但字符串本身可能会改变。

输入:{#Hi#},请{#don't#} {#mark#} 这个{#question#} 为 {#duplicate#}。

输出应该是:“Hi”、“don't”、“mark”、“question”、“duplicate”

我在 JS 中尝试过其他方法,如下所示。添加以下代码仅作为示例。为了清楚起见,请参阅输入和输出。

function extractString(template, initChar, finalChar) {
  let i = 0;
  let data = [];
  do {
    if (template[i] == initChar) {
      for (let j = i + 1; j < template.length; j++) {
        if (template[j] == finalChar) {
          data[data.length] = template.slice(i + 1, j);
          i = j + 1;
          break;
        }
      }
    }
  } while (++i < template.length);
  return data;
}

extractString(
  "#adj#, #brown# fox jumps over the lazy #dog# new one.",
  "#",
  "#",
);

但以上仅适用于单个字符。

任何帮助将不胜感激。 谢谢。

【问题讨论】:

  • 也许以{#(.*?)#}为起点,尝试提取捕获的组。
  • 好的,我试试。
  • 或者如果你确定两个#之间没有‘#’,最好使用#([^#]*)
  • 可以的。我刚刚举了一个例子,开始和结束字符之间可以有任何字符。
  • 如果有这样的例子 {#someth#}ing#} 那么你就会遇到问题。

标签: javascript regex string


【解决方案1】:

参考 Luke Garrigan 的回答,示例代码如下:

let str = `{#Hi#}, Please {#don't#} {#mark#} this {#question#} as {#duplicate#}.`
let matches = str.match(/(?<={#)(.*?)(?=#})/g)
console.log(matches)

【讨论】:

  • 谢谢,@henry-li 我会试试这个。
【解决方案2】:

您可以使用 Positive lookbehind 和 Positive lookahead 来提取 {# 之间的任何内容。

(?&lt;={#)(.*?)(?=#})

应该按如下方式分组:

【讨论】:

  • 你能发布一个示例代码来演示上述解决方案吗?
猜你喜欢
  • 2010-11-04
  • 2014-12-29
  • 2015-03-23
  • 2023-03-27
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多