Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式Javascript在标点符号后添加空格_Javascript_Regex - Fatal编程技术网

正则表达式Javascript在标点符号后添加空格

正则表达式Javascript在标点符号后添加空格,javascript,regex,Javascript,Regex,目前我正在使用replace(/\s*([,.!?:;])[,.!?:;]*\s*/g,“$1”)在标点符号后添加空格。但是如果这个句子包含三个点,它就不起作用了 示例文字:“你好,今天是美好的一天……但明天不是。” 预期输出:“你好,今天是美好的一天……但明天不是。” 给出: “你好,今天是美好的一天。但明天不是。” 请告诉我可以使用什么正则表达式,以便获得预期的输出。您应该将所有连续标点字符匹配到组1中,而不仅仅是第一个字符。此外,在字符串末尾排除标点符号的匹配也是有意义的 你可以用 tex

目前我正在使用
replace(/\s*([,.!?:;])[,.!?:;]*\s*/g,“$1”)
在标点符号后添加空格。但是如果这个句子包含三个点,它就不起作用了

示例文字:“你好,今天是美好的一天……但明天不是。”

预期输出:“你好,今天是美好的一天……但明天不是。”

给出: “你好,今天是美好的一天。但明天不是。”


请告诉我可以使用什么正则表达式,以便获得预期的输出。

您应该将所有连续标点字符匹配到组1中,而不仅仅是第一个字符。此外,在字符串末尾排除标点符号的匹配也是有意义的

你可以用

text.replace(/\s*([,.!?:;]+)(?!\s*$)\s*/g,“$1”)
此外,它还可以方便地
.trim()
查看结果。看

详细信息

  • \s*
    -0个或更多whitspace字符
  • ([,.!?:;]+)
    -第1组(
    $1
    ):一个或多个
  • (?!\s*$)
    -如果不立即后跟零个或多个空格字符,然后是字符串结尾
  • \s*
    -0个或更多whitspace字符
请参阅JavaScript演示:

let text=“你好,今天是美好的一天……但明天不是。”;
text=text.replace(/\s*([,.!?:;])+(?!\s*$)\s*/g,$1');

console.log(文本)为什么要删除除第一个标点以外的所有连续标点?尝试一下
/\s*([,.!?:;]+)\s*/g
。看到了吗?你想捕捉最后一个标点符号吗?这将在行尾添加一个空格。可能在后面使用一些修剪函数,或者添加到模式本身。是的,将该条件添加到上面的正则表达式很简单:
/\s*([,.!?:;]+)(?!\s*$)\s*/g
。请详细解释您的正则表达式要求。@WiktorStribiżew有效,谢谢!
let text = "Hello,today is a beautiful day...But tomorrow is,not.";
text = text.replace(/\s*([,.!?:;])[,.!?:;]*\s*/g, '$1 ')