Javascript 将正则表达式绑定为knockoutjs中的可观察对象

Javascript 将正则表达式绑定为knockoutjs中的可观察对象,javascript,knockout.js,Javascript,Knockout.js,我是个新手。我知道如何定义用于更改元素文本(或从文本元素更新)的可观察对象,但是,我希望模型中的数据实际上是具有读/写访问权限的正则表达式。我想使用textarea设置它,比如: <textarea data-bind="value: regex"></textarea> 并且textarea和span都会得到更新(因为本机正则表达式变量有一个toString()函数,该函数可以很好地显示正则表达式的字符串表示形式)。但是当我在textarea中更改regex时,spa

我是个新手。我知道如何定义用于更改元素文本(或从文本元素更新)的可观察对象,但是,我希望模型中的数据实际上是具有读/写访问权限的正则表达式。我想使用
textarea
设置它,比如:

<textarea data-bind="value: regex"></textarea>
并且
textarea
span
都会得到更新(因为本机正则表达式变量有一个
toString()
函数,该函数可以很好地显示正则表达式的字符串表示形式)。但是当我在
textarea
中更改
regex
时,
span
不会更新。似乎设置可观察对象失败了

这是可以理解的,因为
textarea
中的
只是一个文本,为了将其转换为实际的正则表达式,需要一些代码。我有密码。让我们调用它
函数str2regex()
,其主体类似于:

//this is pseudo code and doesn't neccesarily work
function str2regex( str )
  var r = str.match( "^\/(.+?)\/([mig])*$" );
  if ( r ) {
    if ( r[2] === null ) {
      return new RegExp( r[1] );
    } else {
      return new RegExp( r[1], r[2] );
    }
  }
  return null;
}

如何使用来自
textarea
的文本在我的模型中设置类型正则表达式的值?

您应该将
str2regex
转换为计算可观测值,如下所示:

// str2regex transformed to computed observable
self.regex = ko.computed(function(){
    var m = self.regex_string().match(/^\/(.+)\/([mig])*$/);
    return m ? new RegExp(m[1], m[2]) : null;
});
但您仍然应该在textarea中跟踪可编辑的正则表达式字符串(
regex\u string
observable in my code)


看一看:

是的,我最终就是这么做的。如果我可以使用textarea直接设置正则表达式,而不在模型中定义新变量,那就太好了。但无论如何,我想这是可行的。
//this is pseudo code and doesn't neccesarily work
function str2regex( str )
  var r = str.match( "^\/(.+?)\/([mig])*$" );
  if ( r ) {
    if ( r[2] === null ) {
      return new RegExp( r[1] );
    } else {
      return new RegExp( r[1], r[2] );
    }
  }
  return null;
}
// str2regex transformed to computed observable
self.regex = ko.computed(function(){
    var m = self.regex_string().match(/^\/(.+)\/([mig])*$/);
    return m ? new RegExp(m[1], m[2]) : null;
});