javascript对象上的正则表达式操作会改变其内容吗?

javascript对象上的正则表达式操作会改变其内容吗?,javascript,Javascript,以下代码的行为与预期不符-正则表达式匹配将运行,如果存在匹配,我将收到预期的消息。但是,如果“msg”包含我正在查找的其他文本内容,例如“searchstring2”,并且我已经通过日志记录验证了它的存在,那么首先运行正则表达式匹配似乎可以防止后续条件通过。匹配操作是否可能正在更改“obj” 如果我将正则表达式匹配移动到If/else队列的末尾,那么其他条件将按预期工作 spooky.on('remote.message', function(msg) { this.echo('====

以下代码的行为与预期不符-正则表达式匹配将运行,如果存在匹配,我将收到预期的消息。但是,如果“msg”包含我正在查找的其他文本内容,例如“searchstring2”,并且我已经通过日志记录验证了它的存在,那么首先运行正则表达式匹配似乎可以防止后续条件通过。匹配操作是否可能正在更改“obj”

如果我将正则表达式匹配移动到If/else队列的末尾,那么其他条件将按预期工作

spooky.on('remote.message', function(msg) {
    this.echo('======================');
    this.echo(msg);
    var obj = JSON.parse(msg);
    this.echo(obj.type);
    this.echo('remote message caught: ' + obj.match_state.toString());

    //this.echo(obj.stroke);
    regex = /(string_)(looking|whatever)([\d])/g;
    if(obj.stroke.match(regex)) {
         this.echo('physio message' + obj.stroke.match(regex)[0]);
         TWClient.messages.create({
         body:obj.stroke.match(regex)[0]+' match id: '+obj.matchid,
         ...
         }, function(err, message) {
          //error handling
         });
     }

    else if (obj.type.toString() == "searchstring2" && obj.match_state.toString() == "C") {
        this.echo(obj.type);
        TWClient.messages.create({
            body:obj.surname1 +' v '+obj.surname2+ ' started time: '+obj.utc_timestamp,
            ...
            if(err) {
                console.log(err, message);
            }
        });
    }

     else if (obj.type.toString() == "searchstring3" && obj.match_state.toString() =="F") {
        this.echo(obj.match_state);
        TWClient.messages.create({
            body:'match '+obj.matchid+' finished, time: '+obj.utc_timestamp,
         ...

        }, function(err, message) {
          //error handling
        });
    }




});

使用g标志构建的正则表达式是一种迭代器:操作会更改其内部状态

你可能不需要这面旗子

您也可以像这样重写代码:

var regex = /(string_)(looking|whatever)([\d])/g,  // don't forget the var
    m  = obj.stroke.match(regex);
if (m) {
    this.echo('physio message' + m[0]);
    TWClient.messages.create({
    body:m[0]+' match id: '+obj.matchid,

这将避免两个无用的匹配操作。

如果m=obj.stroke.matchregex,您忘记对regex变量进行var{我猜你的意思是m==作业应该会来before@Deryck不,我真的是指我写的。但在这种情况下,IFA分配表中确实没有任何好处。@我很清楚,你是说如果我使用/g进行全局匹配,obj的内部状态就会改变?@codecowboy是的。这就是为什么,例如,你不能如果要使用test函数,请将g标志与正则表达式一起使用。