繁体   English   中英

将常规表达式绑定为可敲除

[英]Binding a regular expression as an observable in knockoutjs

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

<textarea data-bind="value: regex"></textarea>

并使用以下命令在页面上显示:

<span data-bind="text: regex"></span>

现在初始化工作了:

//inside the model
this.regex = ko.observable( /,/g );

而且textareaspan都会更新(因为本机正则表达式变量具有toString()函数,可以很好地显示正则表达式的字符串表示形式)。 但是,当我在textarea更改regexspan不会更新。 设置可观察对象似乎失败了。

这是可以理解的,因为textareavalue只是一个文本,为了将其转换为实际的正则表达式,需要一些代码。 我有代码。 我们将其称为function 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_string )。

看看: http : //jsbin.com/ofehuj/2/edit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM