JavaScript 正则表达式 : Different results: Built pattern using string & using regexp "literal"?

标签 javascript regex

使用 RegExp 字面值与使用字符串之间有什么区别吗?

http://jsfiddle.net/yMMrk/

String.prototype.lastIndexOf = function(pattern) {
    pattern = pattern + "(?![\s\S]*" + pattern + ")";
    var match = this.match(pattern);
    return (match == null) ? -1 : match.index;
}

function indexOfLastNewline(str) {
    var match = str.match(/\r?\n(?![\s\S]*(\r?\n))/);
    return (match == null) ? -1 : match.index;
}

var str = "Hello 1\nHello 2\nHello 3\nHello4";
alert(str.lastIndexOf("(\r?\n)")); // always returns the 1st newline (7)
alert(indexOfLastNewline(str)); // returns correctly (23)

更新

即使我使用 RegExp 对象,我仍然得到相同的结果

http://jsfiddle.net/yMMrk/2/

最佳答案

您需要将字符串版本中的\转义为\\,如下所示:

String.prototype.lastIndexOf = function(pattern) {
    pattern = pattern + "(?![\\s\\S]*" + pattern + ")";
    var match = this.match(pattern);
    return (match == null) ? -1 : match.index;
}

function indexOfLastNewline(str) {
    var match = str.match(/\r?\n(?![\s\S]*(\r?\n))/);
    return (match == null) ? -1 : match.index;
}

var str = "Hello 1\nHello 2\nHello 3\nHello4";
alert(str.lastIndexOf("(\\r?\\n)")); // returns correctly (23)
alert(indexOfLastNewline(str)); // returns correctly (23)

You can test it out here .

关于JavaScript 正则表达式 : Different results: Built pattern using string & using regexp "literal"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4323456/

相关文章:

javascript - 使用 knockoutjs 创建网格

javascript - 获取文本区域中字符的行和列

javascript - PHP MySQL 短查询关联代码

javascript - 文档就绪函数内的全局范围

javascript - 使用函数参数访问 JSON 数组 javascript

regex - htaccess - 删除带有编码重音字符的域后的多个斜杠

javascript - 使用javascript正则表达式提取字符串

regex - 在向后方向制作一个非贪婪的 RegEx,使其行为与向前方向相同

c# - String.Format 类实用程序的正则表达式

java - 正则表达式包含一个或多个电话号码