Javascript 正则表达式-用换行符替换第3个点和空格

Javascript 正则表达式-用换行符替换第3个点和空格,javascript,regex,Javascript,Regex,下面我有一个正则表达式,它可以很好地工作。它所做的是每隔三个“.”查找一条换行符 some_string.replace(/((?:\.[^\.]*){2})\./g, '$1\.<br/><br/>') 变成: some test. some other test. other 2 test. test nice text. 我需要改变这个来寻找一个点和空间了。换句话说,目前: some test. some other test. other 2.3 test

下面我有一个正则表达式,它可以很好地工作。它所做的是每隔三个“.”查找一条换行符

some_string.replace(/((?:\.[^\.]*){2})\./g, '$1\.<br/><br/>')
变成:

some test. some other test. other 2 test.  
test nice text.
我需要改变这个来寻找一个点和空间了。换句话说,目前:

some test. some other test. other 2.3 test. test nice text.
将看起来像:

some test. some other test. other 2.
3 test. test nice text.
我需要这样的文本:

some test. some other test. other 2.3 test. 
test nice text.
replace(/(([^.]|\.(?! ))*\. ){3}/g, '$&<br/><br/>')

所有这些都是点和空格,我保留我的代码片段以防万一:

/^(\s{0,1}\.{0,1}[a-zA-Z]+)+$/.test('space ..hello space')
false
/^(\s{0,1}\.{0,1}[a-zA-Z]+)+$/.test('space .hello space')
true
v2:

/^(\s?\.?[a-zA-Z]+)+$/.test('space .hello space')
true
/^(\s?\.?[a-zA-Z]+)+$/.test('space ..hello space')
false
v3: if you need some thisn like one space or dot between

/^([\s\.]?[a-zA-Z]+)+$/.test('space hello space')
true
/^([\s\.]?[a-zA-Z]+)+$/.test('space.hello space')
true
/^([\s\.]?[a-zA-Z]+)+$/.test('space .hello space')
false
v4:

/^([ \.]?[a-zA-Z]+)+$/.test('space hello space')
true
/^([ \.]?[a-zA-Z]+)+$/.test('space.hello space')
true
/^([ \.]?[a-zA-Z]+)+$/.test('space .hello space')
false
/^([ ]?\.?[a-zA-Z]+)+$/.test('space .hello space')
true

如果你想用正则表达式测试它们,我建议所有这些都是点和空格,我保留我的代码片段以防万一:

/^(\s{0,1}\.{0,1}[a-zA-Z]+)+$/.test('space ..hello space')
false
/^(\s{0,1}\.{0,1}[a-zA-Z]+)+$/.test('space .hello space')
true
v2:

/^(\s?\.?[a-zA-Z]+)+$/.test('space .hello space')
true
/^(\s?\.?[a-zA-Z]+)+$/.test('space ..hello space')
false
v3: if you need some thisn like one space or dot between

/^([\s\.]?[a-zA-Z]+)+$/.test('space hello space')
true
/^([\s\.]?[a-zA-Z]+)+$/.test('space.hello space')
true
/^([\s\.]?[a-zA-Z]+)+$/.test('space .hello space')
false
v4:

/^([ \.]?[a-zA-Z]+)+$/.test('space hello space')
true
/^([ \.]?[a-zA-Z]+)+$/.test('space.hello space')
true
/^([ \.]?[a-zA-Z]+)+$/.test('space .hello space')
false
/^([ ]?\.?[a-zA-Z]+)+$/.test('space .hello space')
true

如果您想用正则表达式测试它们,我建议您只添加\s好吗?像这样:

(/((?:\.[^\.]*){2})\.\s/g, '$1\.<br/><br/>')
(/((?:\.[^\.]*){2})\.\s/g,$1\.


您不能添加\s吗?像这样:

(/((?:\.[^\.]*){2})\.\s/g, '$1\.<br/><br/>')
(/((?:\.[^\.]*){2})\.\s/g,$1\.


您可以使用javascript中鲜为人知的
.replace
功能,而不是过度复杂化正则表达式

它的第二个参数也可以是函数,而不是字符串。 有关此功能的完整文档,请参见:

要获得解决问题的有效示例,请尝试以下方法:

let i = 0
some_string.replace(/\. /g, () => {
    return i++ == 2 ? '. <br /><br />' : '. '
})
正文{
字体系列:Consolas;

}
您可以使用javascript中鲜为人知的
.replace
功能,而不是过度复杂化正则表达式

它的第二个参数也可以是函数,而不是字符串。 有关此功能的完整文档,请参见:

要获得解决问题的有效示例,请尝试以下方法:

let i = 0
some_string.replace(/\. /g, () => {
    return i++ == 2 ? '. <br /><br />' : '. '
})
正文{
字体系列:Consolas;

}
我会这样做:

some test. some other test. other 2.3 test. 
test nice text.
replace(/(([^.]|\.(?! ))*\. ){3}/g, '$&<br/><br/>')
这与
字符(
/[^.]/
)或
字符相匹配,该字符是字符,后跟空格(
/\.(?!)/
)。它继续匹配(
/*/
),直到遇到一个
后跟一个空格(在本例中,
/[^.]/
/\.(?!)/
都不匹配,因此继续执行
/\./

我之所以使用负前瞻
/(?!)/
,是因为我想逐个字符计算这个字符。如果我将它替换为
/[^]/
,那么它也将匹配“nota space”字符。这意味着,如果我在一行末尾加上两个点
测试句子。。测试2.
它将不匹配
测试句子..
,因为第二个点包含在
/\.[^]/
中,因此已通过

/{3}/
确保组匹配3次

“$&

将用自身替换整个匹配,然后是两个换行符

注 我正在使用捕获组,尽管我没有使用它们。如果您喜欢使用非捕获组,则可以安全地将所有捕获组替换为非捕获组

编辑
有关更具可读性的解决方案,请参阅。这与此完全相同,但使用了惰性解决方案。请记住,在大文本上使用lazy regex时,速度通常会慢一些(我还没有测试两者的速度)。但如果可读性更重要,我会选择他的解决方案。

我会这样做:

some test. some other test. other 2.3 test. 
test nice text.
replace(/(([^.]|\.(?! ))*\. ){3}/g, '$&<br/><br/>')
这与
字符(
/[^.]/
)或
字符相匹配,该字符是字符,后跟空格(
/\.(?!)/
)。它继续匹配(
/*/
),直到遇到一个
后跟一个空格(在本例中,
/[^.]/
/\.(?!)/
都不匹配,因此继续执行
/\./

我之所以使用负前瞻
/(?!)/
,是因为我想逐个字符计算这个字符。如果我将它替换为
/[^]/
,那么它也将匹配“nota space”字符。这意味着,如果我在一行末尾加上两个点
测试句子。。测试2.
它将不匹配
测试句子..
,因为第二个点包含在
/\.[^]/
中,因此已通过

/{3}/
确保组匹配3次

“$&

将用自身替换整个匹配,然后是两个换行符

注 我正在使用捕获组,尽管我没有使用它们。如果您喜欢使用非捕获组,则可以安全地将所有捕获组替换为非捕获组

编辑 有关更具可读性的解决方案,请参阅。这与此完全相同,但使用了惰性解决方案。请记住,在大文本上使用lazy regex时,速度通常会慢一些(我还没有测试两者的速度)。但如果可读性更重要,我会选择他的解决方案。

Brief 出于查看目的,我使用了
$1\n
的替换项。实际上,您可以将其更改为
$1

$&



代码 起初的

注意:上面图案的末尾有一个空格

编辑 感谢下面的编辑

(.*?\. ){3}
替换

$&\n
用法
var s=[
“一些测试。一些其他测试。其他2个测试。测试漂亮的文本。”,
“一些测试。一些其他测试。其他2.3测试。测试漂亮的文本。”
];
s、 forEach(函数(e){
var x=e.replace(/(.*?\){3}/g,“$&\n”);
控制台日志(x);
});摘要
出于查看目的,我使用了
$1\n
的替换项。实际上,您可以将其更改为
$1

$&



代码 起初的

注意:上面图案的末尾有一个空格

编辑 感谢下面的编辑

(.*?\. ){3}
替换

$&\n
用法
var s=[
“一些测试。一些其他测试。其他2个测试。测试漂亮的文本。”,
“一些测试。一些其他测试。其他2.3测试。测试漂亮的文本。”
];
s、 forEach(函数(e){
var x=e.replace(/(.*?\){3}/g,“$&\n”);
控制台日志(x);

});some\u string.replace(/((?:\..[^.]*){2}./,'$1\.

你可以使用:
some\u string.replace((?:\..[^.]*){2}./,'$1\

)<