二方;在Javascript中-检测特殊字符并将所有*替换为%

二方;在Javascript中-检测特殊字符并将所有*替换为%,javascript,regex,replace,character,Javascript,Regex,Replace,Character,问题1:我尝试了以下方法来检测字符(大写和小写)、数字和*但是我得到一个错误,它不是有效的正则表达式 var pattern = '?[a-zA-Z0-9*][a-zA-Z0-9*]*'; 问题2:如何用正则表达式将字符串中的*字符的所有实例替换为%字符?我是一个regex noob,到目前为止我尝试过的一切都在爆炸。。。 (回答) 编辑1和2:澄清我的精神错乱 编辑3:希望提供我的最终解决方案: 这就是我的模式匹配的结果: var pattern = "^[a-zA-Z0-9*]*$"; v

问题1:我尝试了以下方法来检测字符(大写和小写)、数字和*但是我得到一个错误,它不是有效的正则表达式

var pattern = '?[a-zA-Z0-9*][a-zA-Z0-9*]*';
问题2:如何用正则表达式将字符串中的*字符的所有实例替换为%字符?我是一个regex noob,到目前为止我尝试过的一切都在爆炸。。。 (回答)

编辑1和2:澄清我的精神错乱

编辑3:希望提供我的最终解决方案:

这就是我的模式匹配的结果:

var pattern = "^[a-zA-Z0-9*]*$";
var regEx = new RegExp(pattern);
if(regEx.test(searchText) === true) {
    return true;
}

下面选择的答案会按照我最初的要求进行替换。谢谢大家的回答和帮助。

这个问题让我很害怕,因为它表明你正在制造一个漏洞,但答案是:

s = 'foo*bar*baz';
s = s.replace(/\*/g, '%');
// now s == 'foo%bar%baz'
g
regex标志表示“全局”或“全部”。

回答“问题1”部分

首先,如果您想定义一个在别处使用的正则表达式模式,可以使用斜杠
/
而不是引号
来完成

/?[a-zA-Z0-9*][a-zA-Z0-9*]*/
这不是一个有效的正则表达式,因为“可选的”
运算符需要在其左边的某个对象上进行操作,就像
*
所做的那样。删除该对象会得到一个有效的正则表达式

var pattern = /[a-zA-Z0-9*][a-zA-Z0-9*]*/;
改进-由于您的两个字符类
[a-zA-Z0-9*]
完全相同,您不必重复它们,只需使用
+
运算符而不是
*

var pattern = /[a-zA-Z0-9*]+/;
而不是列出
a-zA-Z
只需添加操作符
i

var pattern = /[A-Z0-9*]+/i;
最后,如果要测试输入是否完全匹配,则需要在开始和结束时锚定模式,否则
.match()
将在模式出现在输入中的任何位置时找到该模式

var pattern = /^[A-Z0-9*]+$/i;
var input = "Foo*Bar*baz";
console.log("Got: " + input.match(pattern);

也许你可以发布你尝试过的内容,以便有人告诉你失败的原因以及如何修复。我只是在用这些信息编辑我的问题。我很困惑——你刚才添加的模式似乎与初始问题完全无关。*是正则表达式中的一个特殊字符,因此你需要用一个前导的反斜杠来逃避它当你指的是“星号字符”“@acedanger与我向sblom提出的观点无关,如果你的目标是用
%
取代
*
,那么对你的问题也不是很重要,至少我理解是这样。你真正的问题是什么?只检测字母/数字,或者用
%
替换
*
?好像每个人都使用相同的元语法变量。我理解这个问题,但我正在尝试在替换任何东西之前测试字符。感谢阅读我的想法并回答一个未询问的问题。(这听起来很讽刺,不是——是真诚的)谢谢你走过每一步。我真的很感激。
var pattern = /^[A-Z0-9*]+$/i;
var input = "Foo*Bar*baz";
console.log("Got: " + input.match(pattern);