【问题标题】:How to use regex to replace newlines in HTML tags? [closed]如何使用正则表达式替换 HTML 标签中的换行符? [关闭]
【发布时间】:2020-11-12 13:20:27
【问题描述】:

如何使用RegExp 替换<code> </code> 标签之间的每个\n 字符?

下面的代码太从字面上理解了我的问题。它与<code></code>\n<code></code> 中的\n 匹配,因为从技术上讲,它位于<code> 开始和结束标记之间。

const string = `<!DOCTYPE html>
<html>
<head></head>
<body>
<code>function foo() {

console.log('Hello');

}</code>
<code>function bar() {

console.log('World!');

}</code>
</pre>
</body>
</html>`;

const regExp = /(?<=<code>.*)\n(?=.*<\/code>)/gs;
const newString = string.replace(regExp, '<br>');

console.log(newString);

【问题讨论】:

  • 这样怎么样:str.split("\n")然后过滤掉空字符串(String.trim()之后),最后是Array.join('\n')
  • 您是否在浏览器中作为已加载页面的一部分执行此操作?
  • 我的意思是你可以这样做(?&lt;=&lt;code&gt;(?:(?!&lt;\/?code).)*)\n(?=(?:(?!&lt;\/?code).)*&lt;\/code&gt;)但是很慢。
  • 这个在4天前就被回答并接受了,为什么昨天因为需要focus而被关闭了?有什么不明白的吗?你最好也关闭这个stackoverflow.com/questions/62938272/…,因为为什么?
  • 他们做我认为的事情会得到积分。

标签: javascript regex html-parsing newline


【解决方案1】:

const string = `<!DOCTYPE html>
<html>
<head></head>
<body>
<code>function foo() {

console.log('Hello');

}</code>
<code>function bar() {

console.log('World!');

}</code>
</pre>
</body>
</html>`;

const regExp = /(?<=<code>(?:(?!<\/?code).)*)\n(?=(?:(?!<\/?code).)*<\/code>)/gs;;
const newString = string.replace(regExp, '<br>');

console.log(newString);

【讨论】:

  • 我尝试了类似的方法但没有成功;具体来说,添加一个检查以确保结束标签没有出现在最后一个开始标签之前。由于我无法上班,我认为可能有一些修饰符可以使捕获不那么贪婪,因为我一直在HTML 标签中看到RegExp 的类似用法。不知道他们怎么没有遇到我在这里遇到的同样问题。
  • 你会注意到它在断言中完全相同的正则表达式,除了后面的外观有它首先检查的常量&lt;code&gt;。在可变宽度后视中,正则表达式被处理 RIGHT to LEFT 而不是从左到右处理 ALL 其他构造。所以诀窍是记住这一点来编写它。然而,可变宽度的lookbehinds使用启发式方法并且可能非常耗时。
  • 为什么不赞成(再次)?说明技术原因downvoter!
  • 它应该被要求解释downvotes。
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多