代码之家  ›  专栏  ›  技术社区  ›  Daddy Warbox

简单正则表达式问题:用“?”替换单词

  •  0
  • Daddy Warbox  · 技术社区  · 16 年前

    好的,下面是我当前的测试函数:

    function make_void( str )
    {
        var str_arr = str.split( /[\W]+/ );
        var voidstr;
        var newstr = "";
    
        for ( var i = 0; i < str_arr.length; i++ )
        {
            voidstr = str_arr[i];
            // if ( Math.random() <= 0.9 )
            // {
                voidstr = voidstr.replace( /\w/gi, "?" );
            // }
    
            newstr += voidstr + " ";
        }
    
        document.writeln( newstr );
    }
    

    问题出在哪里?标点符号丢失了。

    有什么好的方法可以修改它们,使它们不存在?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Peter Boughton    16 年前

    空格分割( \s )不在非文字上( \W )你将保留标点符号。

    function make_void( str )
    {
            var str_arr = str.split( /\s+/ ); //  !!!THIS LINE CHANGED!!!
            var voidstr;
            var newstr = "";
    
            for ( var i = 0; i < str_arr.length; i++ )
            {
                    voidstr = str_arr[i];
                    // if ( Math.random() <= 0.9 )
                    // {
                            voidstr = voidstr.replace( /\w/gi, "?" );
                    // }
    
                    newstr += voidstr + " ";
            }
    
            document.writeln( newstr );
    }
    


    更新: 使用Array.join()方法的示例代码段:

    for ( var i = 0; i < str_arr.length; i++ )
    {
        // if ( Math.random() <= 0.9 )
        // {
            str_arr[i] = str_arr[i].replace( /\w/gi, "?" );
        // }
    }
    
    var newstr = str_arr.join(' ');
    
        2
  •  1
  •   Noldorin    16 年前

    一些您试图匹配的示例文本可能会有所帮助。(你到底想干什么 保持

    目前,以下正则表达式可能会有所帮助:

    [\w\d,.?:;"'-()]