如何用 `(X)` 之类的括号替换 `<sup>X</sup>` 之类的 HTML 元素?

Posted

技术标签:

【中文标题】如何用 `(X)` 之类的括号替换 `<sup>X</sup>` 之类的 HTML 元素?【英文标题】:How to replace HTML elements like `<sup>X</sup>` by parentheticals like `(X)`? 【发布时间】:2020-10-22 05:32:45 【问题描述】:

我有这样的 html — BLAH BLAH BLAH &lt;sup&gt;x&lt;/sup&gt; — 在 &lt;th&gt; 中。

我正在尝试将&lt;sup&gt;x&lt;/sup&gt; 替换为(x)

这些都是我尝试过的不同方法。 insideSup 是字母。

newText = $(tableRow).find("th").eq(tdIndex)
  .text().replace("<sup>(.*?)</sup>", " ") + "(" + insideSup + ")";
newText = $(tableRow).find("th").eq(tdIndex)
  .html().replace("<sup>(.*?)</sup>", " ") + "(" + insideSup + ")";
newText = $(tableRow).find("th").eq(tdIndex)
  .find("sup").html().replace("/<sup>/g", " ") + "(" + insideSup + ")";
newText = $(tableRow).find("th").eq(tdIndex)
  .find("sup").html().replace("<sup>(.*?)</sup>", " ") + "(" + insideSup + ")";
newText = $(tableRow).find("th").eq(tdIndex)
  .text().find("sup").html().replace("<sup>(.*?)</sup>", " ") + "(" + insideSup + ")";

【问题讨论】:

您的所有尝试实际上都不包含正则表达式。 "&lt;sup&gt;(.*?)&lt;/sup&gt;" 是一个字符串,/&lt;sup&gt;(.*?)&lt;\/sup&gt;/ 是一个正则表达式; "/&lt;sup&gt;/g" 是一个字符串,/&lt;sup&gt;/g 是一个正则表达式,依此类推。 replace 匹配字符串字面意思 【参考方案1】:

您已经拥有可用的 DOM。你don’t need regex。只需使用replaceWith method:

$(tableRow).find("th").eq(tdIndex).find("sup")
  .replaceWith((_index, textContent) => `($textContent)`);

等效地,没有 jQuery,假设 tableRowHTMLTableRowElement,使用 method with the same name:

tableRow.querySelectorAll("th")[tdIndex].querySelectorAll("sup")
  .forEach((sup) => sup.replaceWith(`($sup.textContent)`));

【讨论】:

【参考方案2】:

只需String.replace() 就非常简单;

let target = document.querySelector("div");

// Store the text (not HTML) in the sup
let originalText = target.querySelector("sup").textContent;

// Replace the sup element with the original content of the sup, 
// surrounded by ()
target.textContent = target.innerHTML.replace("<sup>x</sup>", "(" + originalText + ")");
&lt;div&gt;BLAH BLAH BLAH &lt;sup&gt;x&lt;/sup&gt;&lt;/div&gt;

【讨论】:

【参考方案3】:

您可以通过分别替换 &lt;sup&gt;&lt;/sup&gt; 来完成此操作。您可以使用String.replace() 方法来完成,如下所示。

let text = "BLAH BLAH BLAH <sup>x</sup>";
let newText = text.replace("<sup>", "(").replace("</sup>", ")");

【讨论】:

以上是关于如何用 `(X)` 之类的括号替换 `<sup>X</sup>` 之类的 HTML 元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式把括号连同中括号里的字符去掉

如何用给定的数字替换模式中的x?

如何用 jQuery 替换 innerHTML?

如何用 X 替换句点? [复制]

如何用正则表达式替换字符串

单击 UISearchBar 时如何用 tableview 替换屏幕上的内容