Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_String_Replace - Fatal编程技术网

在JavaScript中执行四个字符串操作

在JavaScript中执行四个字符串操作,javascript,regex,string,replace,Javascript,Regex,String,Replace,我需要使用以下规则操作字符串: 将多个空间替换为一个空间 删除点前面的空格 应删除两个单个(!)字符和点之间的空格:i。e、 ->即 删除前导空格和尾随空格 这就是我的想法: string = string.replace(/\s\s+/g, ' '); string = string.replace(/\s\./, '.'); // ?? string = string.replace(/\.+$/, ''); 我不知道如何处理规则3,也许一切都可以合并在一起。您可以将其合并为: strin

我需要使用以下规则操作字符串:

  • 将多个空间替换为一个空间
  • 删除点前面的空格
  • 应删除两个单个(!)字符和点之间的空格:
    i。e、 
    ->
  • 删除前导空格和尾随空格
  • 这就是我的想法:

    string = string.replace(/\s\s+/g, ' ');
    string = string.replace(/\s\./, '.');
    // ??
    string = string.replace(/\.+$/, '');
    

    我不知道如何处理规则3,也许一切都可以合并在一起。

    您可以将其合并为:

    string = string.replace(/\s{2,}/g, ' ').replace(/\s+\./g, '.').
                    replace(/([!.])\s+([a-z])\b/ig, '$1$2').replace(/^\s+|\s+$/g, '');
    
    • 最好使用
      \s{2,}
    • ([!。])\s+([a-z]\b
      将删除点或
      后面的空格(如果后跟单个字母)
    • ^\s+|\s+$
      将删除前导空格或尾随空格

    您可以将其组合为:

    string = string.replace(/\s{2,}/g, ' ').replace(/\s+\./g, '.').
                    replace(/([!.])\s+([a-z])\b/ig, '$1$2').replace(/^\s+|\s+$/g, '');
    
    • 最好使用
      \s{2,}
    • ([!。])\s+([a-z]\b
      将删除点或
      后面的空格(如果后跟单个字母)
    • ^\s+|\s+$
      将删除前导空格或尾随空格
    示例

    Input: "i. e. "
    Output: "i.e "
    Input: "a. g."
    Output "a.g. "
    
    这背后的逻辑很简单。\w匹配一个[a-zA-Z0-9]字符,.matches a.s字面上匹配一个空格(我相信您知道)序列非常严格(1个字符,1个点,1个空格,后跟1个字符和1个点),使得创建和调整捕获组更容易

    示例

    Input: "i. e. "
    Output: "i.e "
    Input: "a. g."
    Output "a.g. "
    

    这背后的逻辑很简单。\w匹配一个[a-zA-Z0-9]字符,。匹配一个。字面上\s匹配一个空格(我相信您知道)序列非常严格(1个字符,1个点,1个空格,后跟1个字符和1个点)使创建和调整捕获组变得更容易。

    我将快速回答这些问题……但规则1可以简化为\s[2],以取代2个或更多。我现在从3开始。是否只应将“I.e.”转换为“I.e.”,或者将类似“a.u.”的内容转换为“a.u.”?@MikeMcCaughan你是对的:a.u.应该得到a.u.;x.y.应该得到x.y.我会很快回答这些问题……但规则1可以简化为\s[2],要取代2个或更多,我现在从3开始。是应该转换为“I.e.”的只是“I.e.”,还是应该将类似“a.u.”的东西转换为“a.u.”?@MikeMcCaughan你是对的:a.u.应该得到a.u;x.y.应该得到x.y。我需要删除点前面的空格,而不是点后面的空格(你的第二个评论)在你的例子中,
    i.e.->i.e.
    它实际上是在删除
    之后的空格。哦,我明白了。我刚才说的是第二条规则:
    Lorem ipsum。
    应该得到
    Lorem ipsum。
    第三条规则必须是这样描述的:只删除单字符点和单字符点之间的空格:
    i.e.->i.e.
    i.em.->i.em.
    什么是
    \b
    意思?
    \b
    用于单词边界。这是为了确保我们在点和空格后有一个字母。我需要删除点前面的空格,而不是点后面的空格(您的第二条评论)在你的例子中,
    i.e.->i.e.
    它实际上是在删除
    之后的空格。哦,我明白了。我刚才说的是第二条规则:
    Lorem ipsum。
    应该得到
    Lorem ipsum。
    第三条规则必须是这样描述的:只删除单字符点和单字符点之间的空格:
    i.e.->i.e.
    。不应影响
    i.em.->i.em.
    什么是
    \b
    意思?
    \b
    用于单词边界。这是为了确保点和空格后有一个字母。