在javascript中使用搜索并替换为正则表达式

在javascript中使用搜索并替换为正则表达式,javascript,regex,Javascript,Regex,我在notepad++中使用了一个正则表达式,用于搜索和替换操作一些文本,我希望将其合并到javascript代码中。这是正则表达式: 搜寻 (?-s)(.{150250}\(\[\d+\])*)\h+并替换为\1\r\n\x20\x20\x20 本质上,每150-250个单词创建一个新段落并缩进 这是我在JavaScript中尝试过的。用于HTML中的文本区域。我有以下JavaScript: function rep1() { var re1 = new RegExp('(?-s)(.

我在notepad++中使用了一个正则表达式,用于搜索和替换操作一些文本,我希望将其合并到javascript代码中。这是正则表达式:

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

本质上,每150-250个单词创建一个新段落并缩进

这是我在JavaScript中尝试过的。用于HTML中的文本区域
。我有以下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()
的参数放置,但这也不起作用。你知道我做错了什么吗?

有几个问题:

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

  • 在JavaScript中,除非为正则表达式提供了
    g
    修饰符,否则
    replace
    将只替换第一个匹配项

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

  • 替换字符串中的反向引用应为
    $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;
}

(?-s)
在JS引擎中无效。您的函数在哪里执行?回答得太好了,我自己写这篇文章可能要花很多时间,所以非常感谢您花时间来写,非常感谢@FloranThovan这里有一个错误:
(?-s)
关闭单线模式,您只需在JS正则表达式中删除它并继续使用
。仅当需要匹配任何符号(包括换行符)时才使用
[^]
。另外,
\h
在JS中是
[^\S\r\n]
(或
[^\S\r\n\f\v]
)啊,你说得对,@WiktorStribiżew。相应更新!