Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript RegExp:不同的结果:使用字符串和RegExp“literal”构建模式?_Javascript_Regex - Fatal编程技术网

JavaScript RegExp:不同的结果:使用字符串和RegExp“literal”构建模式?

JavaScript RegExp:不同的结果:使用字符串和RegExp“literal”构建模式?,javascript,regex,Javascript,Regex,使用RegExp文本和字符串之间有什么区别吗 更新 即使使用RegExp对象,也会得到相同的结果 您需要在字符串版本中将\转义为\\,如下所示: String.prototype.lastIndexOf = function(pattern) { pattern = pattern + "(?![\\s\\S]*" + pattern + ")"; var match = this.match(pattern); return (match == null) ? -1 :

使用RegExp文本和字符串之间有什么区别吗

更新

即使使用RegExp对象,也会得到相同的结果

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

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
.

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

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");

.

一般来说,如果使用字符串构造正则表达式,则需要转义反斜杠;如果使用正则表达式文字,如果斜杠出现在正则表达式中,则需要对其进行转义

所以正则表达式

\s/
可以编写为JavaScript字符串,如下所示:

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
作为JavaScript正则表达式文字,如下所示:

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
此外,模式修改器的处理方式也有所不同。例如,要使正则表达式不区分大小写,可以从JavaScript字符串构造正则表达式对象,如下所示:

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
使用正则表达式文字,可以直接执行以下操作:

var myre = /[a-z]/i;

另外,请参见。

一般来说,如果使用字符串构造正则表达式,则需要转义反斜杠;如果使用正则表达式文字,如果斜杠出现在正则表达式中,则需要对其进行转义

所以正则表达式

\s/
可以编写为JavaScript字符串,如下所示:

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
作为JavaScript正则表达式文字,如下所示:

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
此外,模式修改器的处理方式也有所不同。例如,要使正则表达式不区分大小写,可以从JavaScript字符串构造正则表达式对象,如下所示:

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)
"\\s/"
/\s\//
var myre = new RegExp("[a-z]", "i");
使用正则表达式文字,可以直接执行以下操作:

var myre = /[a-z]/i;
另外,请参见