Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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完成_Javascript_Regex - Fatal编程技术网

Javascript 使用regexp完成

Javascript 使用regexp完成,javascript,regex,Javascript,Regex,我想为我的webbrowser的输入制作一个自动完成器,例如,如果您按tab键,单词htt将自动完成,以将tp://添加到我的输入值中 仅当用户在URL开头输入“htt”时,“自动完成”属性才有效 我想用正则表达式验证自动完成: if(event.keyCode == 9){ if(myInput.value.match(/^(h|ht|htt|http|http:|http:\/)/)){ myInput.value = "http://"; }

我想为我的webbrowser的输入制作一个自动完成器,例如,如果您按tab键,单词
htt
将自动完成,以将
tp://
添加到我的输入值中

仅当用户在URL开头输入“htt”时,“自动完成”属性才有效

我想用正则表达式验证自动完成:

 if(event.keyCode == 9){
      if(myInput.value.match(/^(h|ht|htt|http|http:|http:\/)/)){
          myInput.value = "http://";
      }
 }

但结果不是预期的…

有三件事需要改变:

  • 您没有分配给
    myInput.value
    ,因为您在那里与
    =
    而不是
    =
    进行比较
  • 正则表达式最好有一个字符串结尾锚点
    $
    ,否则初始“h”后面的其他文本(可能在编辑了已经存在的“http”之后)可能会被替换,这可能是不需要的
  • 最好取消TAB键的默认行为,这样不仅可以在离开输入框时自动完成。但是,更改TAB键的默认行为并不符合我的偏好
以下是一个工作片段:

myInput.addEventListener('keydown',函数(事件){
如果(event.keyCode==9){
if(this.value.match(/^(h | ht | htt | http | http:| http:\/)$/){
this.value=“http://”;
}
event.preventDefault();
}
});

总体上回答得不错,但我建议使用一种更具可伸缩性的模式:
h(?:t(?:t(?:p(?:\/?)?)?
@CAustin,是的,这确实更有效,尽管我猜正则表达式解析器(应该?)实际上足够聪明,可以用这种方式编译它(除了非捕获组,这当然仍然是一个区别).谢谢你的回答!这正是我要找的。太棒了,谢谢你的专业知识