1

给定一个输入文本,其中所有空格都替换为 n _ :

Hello_world_?. Hello_other_sentenc3___. World___________.

我想保留单词之间的 _,但我想将每个标点符号粘贴到句子的最后一个单词上,最后一个单词和标点符号之间没有任何空格。我想使用标点符号作为我的正则表达式的枢纽。

我写了以下 JS 正则表达式:

str = str.replace(/(_| )*([:punct:])*( |_)/g, "$2$3"); 

这失败了,因为它返回:

Hello_world_?. Hello_other_sentenc3_. World_._ 

为什么它不起作用?如何删除最后一个单词和标点符号之间的所有“_”? http://jsfiddle.net/9c4z5/

4

2 回答 2

4

试试下面的正则表达式,它利用了积极的前瞻

str = str.replace(/_+(?=\.)/g, "");

它用空字符串替换所有紧跟标点符号的下划线,从而删除它们。

如果您想匹配除句点之外的其他标点字符,请将该\.部分替换为适当的字符类。

于 2013-11-09T21:30:16.767 回答
1

JavaScript:punct:在其正则表达式实现中没有。我相信你必须列出你关心的标点符号,也许是这样的:

str = str.replace(/(_| )+([.,?])/g, "$2");

也就是说,用_标点符号替换紧跟标点符号的任何组或空格。

演示:http: //jsfiddle.net/9c4z5/2/

于 2013-11-09T21:30:29.580 回答