javascript RexExp在带尖括号的字符串上的奇怪行为[关闭]

t8e9dugd  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(86)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
13秒前关闭
Improve this question
我有下一个RegExp:

const codeRegExp = new RegExp(/<doc-code[^>]+docTitle="([^"]*)"[^>]+language="([^"]*)"[^>]+content="([^"]*)"[^>]*><\/doc-code>/g);

我有下一个输入文本:

const fileContent = `
      <doc-section docTitle="Quick Start" link="start">
        <doc-code
          docTitle="ts"
          language="ts"
          content="import { ButtonModule } from 'primeng/button';"
        ></doc-code>
        <doc-code
          docTitle="html"
          language="html"
          content="<p-button label='Primary'></p-button>"
        ></doc-code>
      </doc-section>
    `;

如果现在我已经执行了下一个代码:

let match;
let result = [];
while ((match = codeRegExp.exec(fileContent)) !== null) {
  const [, docTitle, language, content] = match;
  result.push({docTitle, language, content});
}
document.getElementById('log').innerHTML = JSON.stringify(result, null, 2);

然后我将给予以下输出:

[
  {
    "docTitle": "ts",
    "language": "ts",
    "content": "import { ButtonModule } from 'primeng/button';"
  },
  {
    "docTitle": "html",
    "language": "html",
    "content": ""
  }
]

内容字段为空。如果我从内容字段中删除尖括号,那么它就被正确解析了。
当我在https://regex101.com/上检查这个RexExp- all时,第二个块的内容在RegExp的第三组上(参见screenshot)。
我做错了什么?

const codeRegExp = new RegExp(/<doc-code[^>]+docTitle="([^"]*)"[^>]+language="([^"]*)"[^>]+content="([^"]*)"[^>]*><\/doc-code>/g);

const fileContent = `
      <doc-section docTitle="Quick Start" link="start">
        <doc-code
          docTitle="ts"
          language="ts"
          content="import { ButtonModule } from 'primeng/button';"
        ></doc-code>
        <doc-code
          docTitle="html"
          language="html"
          content="<p-button label='Primary'></p-button>"
        ></doc-code>
      </doc-section>
    `;

let match;
let result = [];
while ((match = codeRegExp.exec(fileContent)) !== null) {
  const [, docTitle, language, content] = match;
  result.push({
    docTitle,
    language,
    content
  });
}

console.log(result);

Stackblitz上重现问题。

hlswsv35

hlswsv351#

问题是内容被插入HTML中,浏览器将其解释为HTML

相关问题