JS&正则表达式:如何正确替换标点符号模式?

时间:2013-11-09 21:24:18

标签: javascript regex

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

替换
Hello_world_?. Hello_other_sentenc3___. World___________.

我想在单词之间保留_,但是我想将每个标点符号放回到句子的最后一个单词,而在最后一个单词和标点符号之间没有任何空格。我想用标点符号作为我的正则表达式的支点。

我写了以下JS-Regex:

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

这失败了,因为它返回:

Hello_world_?. Hello_other_sentenc3_. World_._ 

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

2 个答案:

答案 0 :(得分:4)

尝试following regex,它使用了positive lookahead

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

它替换了所有下划线,后面紧跟着一个带有空字符串的标点字符,从而删除它们。

如果您想匹配其他标点字符而不仅仅是句点,请将\.部分替换为适当的字符类。

答案 1 :(得分:1)

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

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

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

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