- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用第三方 JS 库。它需要一些 RegExp 作为输入,用于匹配字符串的各个部分。现在我需要在我传递的RegExp中使用lookbehind,但是lookbehind在JS RegExp中没有实现。因此,作为解决方法,我尝试从 RegExp 派生:
function SubRegExp(pattern, matchIndex) {
this.matchIndex = matchIndex;
this.prototype = new RegExp(pattern);
this.exec = function(s) {
return [ this.prototype.exec(s)[this.matchIndex] ];
}
}
我正在这样测试:
var re = new SubRegExp('m(.*)', 1);
console.log(re.exec("mfoo"));
console.log("mfoo".match(re));
我得到的是:
["foo"]
["o", index: 2, input: "mfoo"]
第一个输出符合预期,但我并没有真正了解第二个输出发生了什么。我做错了什么?
最佳答案
为了使 String.prototype.match
函数与您的自定义类实例一起使用,您应该实现一个 toString
方法,该方法返回正则表达式字符串。
function SubRegExp(pattern, matchIndex) {
this.pattern = pattern;
this.matchIndex = matchIndex;
this.rgx = new RegExp(pattern);
this.exec = function(s) {
return [ this.rgx.exec(s)[this.matchIndex] ];
}
}
SubRegExp.prototype.toString = function(){
return this.pattern;
}
var re = new SubRegExp('m(.*)', 1);
console.log(re.exec('mfoo'));
console.log('mfoo'.match(re));
//-> ["foo"]
//-> ["mfoo", "foo", index: 0, input: "mfoo"]
解释您的示例中发生的情况,以及为什么会得到 'o'
结果。实际上,这是非常有趣的巧合 - 'mfoo'.match(re)
将 re
实例转换为字符串,然后将其用作正则表达式模式。 re.toString() === "[object Object]"
。
"[object Object]"
- 这是正则表达式中的一个组,这就是匹配第一个 'o'
的原因:)
编辑
抱歉,没有太注意第二个输出。 .match()
不会调用您的自定义 exec
函数,因为使用了原始正则表达式字符串(来自 toString
的,正如我所言解释了)。唯一的出路是重写 match
函数,尽管这不是一个好的做法。
(function(){
var original = String.prototype.match;
String.prototype.match = function(mix) {
if (mix instanceof SubRegExp)
return mix.exec(this);
return original.call(this, mix);
}
}());
关于javascript - 源自 JS RegExp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573239/
我正在使用第三方 JS 库。它需要一些 RegExp 作为输入,用于匹配字符串的各个部分。现在我需要在我传递的RegExp中使用lookbehind,但是lookbehind在JS RegExp中没有
我正在尝试创建一个包含几个下拉菜单的表单。第一个由“客户名称”填充,该名称是从我的 MYSQL 数据库中提取的。选择后,其下方的下拉菜单将填充到数据库中与该“客户名称”关联的可用“客户站点”(在表中的
我运行一个包含数千个容器的 docker 集群,每天随机运行几次我有一个进程“卡住”阻止容器停止。下面是一个带有相应进程的示例容器,以及我试图杀死容器/进程的所有内容。 容器: # docker ps
抱歉,这是一个很长的问题,但它有点复杂。感谢阅读。 我有一个我开发的自定义套接字工厂和套接字类 (Android 5.0),用于执行我需要在该级别执行的一些特定任务。这是我的套接字工厂和套接字(为简洁
有这样的事情: var _ = require("sdk/l10n").get; console.log(_("hello_id!")); 对于新的 SDK。 如何使用它来收集 Firefox ENT
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我在我的 PHP 应用程序中实现了一个亵渎过滤器,它根据存储在 MySQL 中的表的亵渎单词列表检查用户从浏览器客户端发送的字符串。该表如下所示: Word badWord1 badWord2 etc
ASP.net 给出了这个奇怪的错误信息。它在尝试加载使用名为“loggedin.master”的母版页的页面时出现。 完整的错误信息如下: [A]ASP.loggedin_master cannot
我正在尝试在 iOS 应用程序和 java servlet 之间实现 AES 加密。 Java servlet 使用 BouncyCaSTLe 库,而 iOS 应用程序使用 OpenSSL。尽管我在双
我是一名优秀的程序员,十分优秀!