如何使用replace()函数在Javascript中替换星号(*)?

17
使用 JQuery,我正在从一个查询框中提取一些MySQL数据库中的数据的值。 由于大多数用户会使用'*'(星号)作为通配符值,并且MySQL使用'%'字符,因此我希望将任何星号转换为'%'。
通常,这只需要简单地使用
queryString = inputText.replace('*', '%');

但我尝试过,但并没有取得很大的成功。JavaScript 的 replace() 函数只替换第一个出现的匹配项,所以在类似于 *Foo* 这样的字符串中无法替换最后一个星号。

我尝试的第二个选择是使用正则表达式,但也没有成功:

queryString = inputText.replace(/\x2a/g, '%');

我该如何将“*”(星号)替换为“%”(百分号)?我想有一个非常简单的正则表达式或者是我忽略了什么。


实际上,"*Foo*".replace(/\x2a/g, '%') 对我有效。那个方法有什么问题?或者是哪个浏览器不支持? - Roatin Marth
很有可能我在那个地方搞砸了什么。我刚刚再次测试了一下,它正在工作 - 奇怪。我正在Firefox 3.5夜间版(Shiretoko)和Epiphany(webkit)中进行测试。 - S Pangborn
此外,这可能很容易在最新的夜间版中修复。我应该保留旧版本进行测试。 - S Pangborn
6个回答

39

请尝试:

queryString = inputText.replace(/\*/g, '%');

如此简单,却又如此困难。太棒了 :) - user2831723

5
将字符串分割为数组,然后再连接成字符串比正则表达式替换更快:
queryString = inputText.split("*").join("%");

我从未见过这种方法,但我一定会进行一些自己的测试并尝试一下。谢谢! - S Pangborn
有趣。需要一些基准测试,包括CPU和内存...除非你在大文本上进行替换,否则我怀疑我们能看到多少速度提升。 - PhiLho
2
这是我找到的一个解释:https://dev59.com/8nRC5IYBdhLWcg3wAcM3#441035 - Roatin Marth

1

实际上,你不需要正则表达式。你可以简单地使用replaceAll:

queryString = inputText.replaceAll("*", "%");

1
如果您想尝试具有良好记忆性的密码
str.replace(str.substr(1,str.length-3), str.substr(1,str.length-3).replace(/./g,"*"))

输出结果将会是:
1*********xY

0
我使用这个函数来隐藏电话号码的一些数字。

function replacePhoneNumbers(number){
    var cuantos = number.length;
    var tele = [];
    for (var i = 0; i < cuantos; i++) {
        if(i < 7){
            tele[i] = number[i].replace(/^\d+$/, "*");
        }
        else{
            tele[i] = number[i];
        }
    }
    
    var full_phone = "";
    for (var i = 0; i < cuantos; i++) {
        full_phone += tele[i];
    }
    return full_phone;
    //return number;
}

var number = replacePhoneNumbers("7533930048");
document.getElementById("demo").innerHTML = number;
<p id="demo"></p>


0

您可以使用:

queryString = inputText.replace(/[*]/g,"");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接