【问题标题】:JS & Regex: how to replace punctuation pattern properly?JS & Regex:如何正确替换标点模式?
【发布时间】:2013-11-21 21:25:41
【问题描述】:

给定一个输入文本,其中所有空格都替换为 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/

【问题讨论】:

  • 我不相信 JS 在其正则表达式实现中有 :punct: 选项。
  • 你知道我应该用什么代替吗?

标签: javascript regex


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    试试following regex,它使用positive lookahead

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

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

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

    【讨论】:

    • 我需要所有的标点符号,我的最终用户是多语言的,使用多种脚本。
    • @Hugolpz 你有没有尝试实现我在上一段中解释的内容?
    • 我是初学者,我假装我了解什么是“字符类”但想要准确的答案,而实际上我只是不明白您的答案(“字符类”)。就是这样。
    • @Hugolpz 只需列出您要匹配的标点符号:/_+(?=[.?!;,])/g
    • 马吕斯:谢谢。所以“字符类”是您在[] 中放置的字符列表,我猜
    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 2012-03-05
    • 2014-10-16
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多