我有一个正则表达式,我一直在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()
的参数,但这也不起作用。有什么想法我做错了吗?
答案 0 :(得分:1)
几个问题:
(?-s)
。您将需要单独添加修饰符。但是,这是JavaScript中的默认设置,因此您可以将其省略。如果您打算让.
也与换行符匹配,请在JavaScript正则表达式中使用[^]
代替.
。\h
(水平空白)。相反,您可以使用[^\S\r\n]
。当将字符串文字传递给new RegExp
时,请注意反斜杠是字符串文字符号的转义字符,因此它们不会出现在正则表达式中。因此,要么将它们加倍,要么使用JavaScript的regex文字符号
在JavaScript中,replace
仅替换第一次出现的情况,除非您为正则表达式提供了g
修饰符。
替换(replace
的第二个参数)不应为正则表达式。它应该是一个字符串,因此请勿对其应用new RegExp
。
$1
格式。 JavaScript在那里不支持\1
。string
,而您确实要引用s
。这应该有效:
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;
}