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\
)<