Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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 尝试在运行中替换字符串,最好的方法是什么?_Javascript_Html_Css_Regex - Fatal编程技术网

Javascript 尝试在运行中替换字符串,最好的方法是什么?

Javascript 尝试在运行中替换字符串,最好的方法是什么?,javascript,html,css,regex,Javascript,Html,Css,Regex,我试图用一个跨距来替换一些正在运行的文本 例如: 当一个人在打字时,当他们输入“向后”这个词及其后面的空格时,整个句子或其中包含该词的行都会加粗 现在我已经为它设置了CSS类,我一直在尝试将它放入一个span中,但我不确定它是否有效。。。每当有新的事情发生时,它也会重置,所以光标会跳回到开头,它不会让我前进 以下是我到目前为止的情况(我的正则表达式现在也错了): 功能替换(e){ 如果(e.keyCode==13){ 元素=document.getElementById(“脚本”); rg=/

我试图用一个跨距来替换一些正在运行的文本

例如:

当一个人在打字时,当他们输入“向后”这个词及其后面的空格时,整个句子或其中包含该词的行都会加粗

现在我已经为它设置了CSS类,我一直在尝试将它放入一个span中,但我不确定它是否有效。。。每当有新的事情发生时,它也会重置,所以光标会跳回到开头,它不会让我前进

以下是我到目前为止的情况(我的正则表达式现在也错了):

功能替换(e){
如果(e.keyCode==13){
元素=document.getElementById(“脚本”);
rg=/^INT/;
element.innerHTML=element.innerHTML.replace(
rg,
'$1'
);
};
};

代替

正如@Mouser所提到的,您的正则表达式将在开头查找INT字符串

这是正确的代码。你只需要根据需要修改你的正则表达式。我已经测试了它和它的工作

function replace(e) {
  if (e.keyCode == 13) {
    element = document.getElementById("script");
    var _str = element.innerHTML.trim("")
    rg = /INT/;
    element.innerHTML = _str.replace(
      rg,
      function($1) {
        console.log($1)
          return '<h1><span id="bold">' + $1 + '</span></h1>'
      } 
    );

    //Set cursor position
    var range = document.createRange()
    var _lastDom = element.childNodes[element.childNodes.length - 1];
    var end = '';
    if(_lastDom && _lastDom.innerHTML == undefined) {
        end = _lastDom.length
    } else {
        _lastDom
        end = 1
    }
    range.setStart(_lastDom,end)
    range.setEnd(_lastDom,end)
    sel = document.getSelection()
    sel.removeAllRanges()
    sel.addRange(range)
  };
};
功能替换(e){
如果(e.keyCode==13){
元素=document.getElementById(“脚本”);
var_str=element.innerHTML.trim(“”)
rg=/INT/;
element.innerHTML=\u str.replace(
rg,
职能(1美元){
console.log(1美元)
返回“”+$1+“”
} 
);
//设置光标位置
var range=document.createRange()
var_lastDom=element.childNodes[element.childNodes.length-1];
var-end='';
if(_lastDom&&_lastDom.innerHTML==未定义){
end=\u lastDom.length
}否则{
_拉斯特姆
结束=1
}
range.setStart(_lastDom,end)
range.setEnd(_lastDom,end)
sel=document.getSelection()
选择removeAllRanges()
选择添加范围(范围)
};
};

可能是一种更好的方法,但类似的方法可能会有所帮助

var thepara=document.getElementById('thepara').innerHTML;
document.getElementById('thetext')。addEventListener('keyup',函数(e){
var thetext=this.value;
var thelength=this.value.length;
var thestart=文本的参数索引;
var found=参数substr(开始,长度);
如果(找到!=“n”){
var newstring=“”+找到+”;
document.getElementById('thepara').innerHTML=thepara.replace(已找到,新闻字符串);
}
});
.bold{font-weight:bold;}


这是伦敦东南部郊区一个阳光明媚的好天气
由于
^
的缘故,您的正则表达式在字符串开头寻找INT。通过将INT括在括号中来捕获它。您的replace函数现在仅在返回后激发。这是故意的?$1在原始代码中是正确的。这将生成错误@harpreetinghan替换中的onymous函数是不必要的:
“$1”
应该足够作为替换字符串。@Mouser,实际上我不熟悉这个方法