正则表达式,两种方式,不同的结果
Regex, two ways, different results.
这里有两种相同的方法来实现某些东西。他们都应该做同样的事情,但他们没有。
代码:http://jsfiddle.net/8vjctofs/
a1 = function(str) {
return str.replace(new RegExp("[^a-zA-Z0-9's]", "gi"), "");
}
a2 = function(str) {
return str.replace(/[^a-zA-Z0-9's]/gi, "");
}
var string = "abc abc";
console.log(a1(string));
console.log(a2(string));
输出:
abcabc
abc abc
请告诉我为什么?代码是相同的,除了第一个函数通过 new 运算符创建正则表达式,第二个函数不创建正则表达式。
在使用对象时需要使用''s
RegExp
:
a1 = function(str) {
return str.replace(new RegExp("[^a-zA-Z0-9''s]", "gi"), "");
}
否则,'s
被解释为对象RegExp
文字s
。
> console.log("[^a-zA-Z0-9's]");
"[^a-zA-Z0-9s]"
字符串文本也使用反斜杠作为转义,无法识别的序列的反斜杠将被忽略。转义永远不会到达RegExp
构造函数。
当然,正确的做事方法是始终使用正则表达式文字。但是,如果您需要任何字符串中的文字反斜杠,也可以对其进行转义。
new RegExp("[^a-zA-Z0-9''s]", "gi")
相关文章:
- 显示可链接的搜索结果+对齐方式
- 正则表达式,两种方式,不同的结果
- Javascript:我可以't找到正确的方式来表达布尔“;如果“;以得到我想要的结果
- JavaScript/jQuery:格式化日期计算结果的最佳方式
- 注入jquery会完全改变页面结果——这是一种糟糕的方式
- Select2 以编程方式设置搜索词并打开包含相关结果的下拉列表(无 ajax 调用)
- JavaScript 对象,使用两种不同的调用函数方式查看预期结果
- Javascript”;这个“;作用域根据调用方式给出不同的结果
- 承诺在以不同方式执行时显示不同的结果
- 以编程方式运行摩卡时的访问结果
- 搜索数组并返回结果的最佳方式
- 在html页面中以有序的方式显示结果
- 将查询结果传递到另一个页面的最佳方式
- 从Q.all压缩结果的最佳方式
- 需要一种优雅的方式来根据输入改变一行if语句的返回结果
- JavaScript模块模式以两种不同的方式编写,结果相同
- 为什么在+=操作中使用串联的变量会根据它的定义方式产生不同的结果?
- 如何更改在此字符排序器代码中显示结果的方式
- 如何执行PHP代码,并获得结果,就像当一些数据输入通过任何方式javascript等
- 以编程方式触发typeahead.js结果显示