给定一个输入文本,其中所有空格都被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/
答案 0 :(得分:4)
尝试following regex,它使用了positive lookahead:
str = str.replace(/_+(?=\.)/g, "");
它替换了所有下划线,后面紧跟着一个带有空字符串的标点字符,从而删除它们。
如果您想匹配其他标点字符而不仅仅是句点,请将\.
部分替换为适当的字符类。
答案 1 :(得分:1)
JavaScript在其正则表达式实现中没有:punct:
。我相信你必须列出你关心的标点符号,也许是这样的:
str = str.replace(/(_| )+([.,?])/g, "$2");
也就是说,用标点符号替换任何紧跟着标点符号的_
或空格组。