【问题标题】:Using search and replace with regex in javascript在 javascript 中使用正则表达式进行搜索和替换
【发布时间】:2019-03-16 14:40:01
【问题描述】:

我有一个正则表达式,我一直在 notepad++ 中使用它来搜索和替换来操作一些文本,我想将它合并到我的 javascript 代码中。这是正则表达式:

搜索 (?-s)(.{150,250}\.(\[\d+\])*)\h+ 并替换为 \1\r\n\x20\x20\x20

本质上是为每 150-250 个单词创建新段落并缩进。

这是我在 JavaScript 中尝试过的。对于 HTML 中的文本区域 <textarea name="textarea1" id="textarea1"></textarea>。我有以下 JavaScript:

function rep1() {
    var re1 = new RegExp('(?-s)(.{150,250}\.(\[\d+\])*)\h+');
    var re2 = new RegExp('\1\r\n\x20\x20\x20');
    var s = document.getElementById("textarea1").value;
    s = string.replace(re1, re2);
    document.getElementById("textarea1").value = s;
}

我也尝试将正则表达式直接作为string.replace() 的参数,但这也不起作用。任何想法我做错了什么?

【问题讨论】:

  • (?-s) 在 JS 引擎中无效test here
  • 你的函数在哪里执行?

标签: javascript regex


【解决方案1】:

几个问题:

  • JavaScript 不支持(?-s)。您需要单独添加修饰符。但是,这是 JavaScript 中的默认设置,因此您可以忽略它。如果您打算让 . 也匹配换行符,请在 JavaScript 正则表达式中使用 [^] 而不是 .
  • JavaScript 不支持\h -- 水平空白。相反,您可以使用[^\S\r\n]
  • 将字符串文字传递给new RegExp 时,请注意反斜杠是字符串文字符号的转义字符,因此它们不会出现在正则表达式中。所以要么加倍它们,要么使用 JavaScript 的正则表达式文字符号

  • 在 JavaScript 中,replace 只会替换第一次出现,除非您为正则表达式提供了 g 修饰符。

  • 替换(replace 的第二个参数)不应是正则表达式。它应该是一个字符串,所以不要对它应用new RegExp

  • 替换字符串中的反向引用应该是$1 格式。 JavaScript 不支持 \1 那里。
  • 你在真正想引用s的地方引用string

这应该可行:

function rep1() {
    var re1 = /(.{150,250}\.(\[\d+\])*)[^\S\r\n]+/g;
    var re2 = '$1\r\n\x20\x20\x20';
    var s = document.getElementById("textarea1").value;
    s = s.replace(re1, re2);
    document.getElementById("textarea1").value = s;
}

【讨论】:

  • 很棒的答案,我自己写它需要很长时间,所以非常感谢你抽出时间来做,非常感谢!
  • @FloranThovan 这里有一个不准确之处:(?-s) 关闭单行模式,您只需在 JS 正则表达式中删除它并继续使用.。仅当您需要匹配任何符号(包括换行符)时才使用[^]。此外,\h 在 JS 中是 [^\S\r\n](或 [^\S\r\n\f\v])。
  • 啊,你说得对,@WiktorStribiżew。相应更新!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2019-09-04
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
相关资源
最近更新 更多