【问题标题】:Simple regex problem: Replacing words with '?'s简单的正则表达式问题:用 '?'s 替换单词
【发布时间】:2009-06-02 22:19:12
【问题描述】:

好的,这是我目前的测试功能:

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 );
}

问题?标点符号丢失。

有什么好的方法可以修改它们而不是?

【问题讨论】:

    标签: javascript regex replace


    【解决方案1】:

    在空格 (\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() 方法的示例 sn-p:

    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(' ');
    

    【讨论】:

    • 哦!呸!我知道有一个简单的答案。 :P
    • 哦,还有另一个想法 - 考虑使用 Array.join(' ') 而不是手动字符串连接 - 我认为它会更快,而且我肯定会说它更具可读性......跨度>
    【解决方案2】:

    您尝试匹配的一些示例文本可能会有所帮助。 (你真正想要保留什么?)

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

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

    这匹配单词、数字和一些标点符号(尽管绝不是全部)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2011-04-30
      相关资源
      最近更新 更多