Javascript 如何使用随机散列删除出现的内容?
我在React应用程序中有一个受控的Javascript 如何使用随机散列删除出现的内容?,javascript,node.js,arrays,reactjs,regex,Javascript,Node.js,Arrays,Reactjs,Regex,我在React应用程序中有一个受控的,用户可以在其中键入 我想跟踪它,并将出现的$.text和$.lang替换为随机散列/数字 来自 let string='我可能有多个$.text和$.lang,比如$.text和$.lang'; 我希望所有出现的$.text和$.lang都有一个随机数(或任何唯一的): 至 updateString='我可能有多个123和245,比如744和111'; 我到目前为止所做的事情 let temp=value.split(“”).reverse().join
,用户可以在其中键入
我想跟踪它,并将出现的$.text
和$.lang
替换为随机散列/数字
来自
let string='我可能有多个$.text和$.lang,比如$.text和$.lang';
我希望所有出现的$.text和$.lang都有一个随机数(或任何唯一的):
至
updateString='我可能有多个123和245,比如744和111';
我到目前为止所做的事情
let temp=value.split(“”).reverse().join(“”);//将其反转以查找最近发生的事件
让reText=/txet.\$/i;
设reLang=/gnal.\$/i;
让我们更新;
if(value.includes('$.text')){
updated=temp.replace(reText,`${hash}}#`)//替换最新出现的
}否则{
updated=temp.replace(reLang,`${hash}#`)//替换最新出现的
}
updatedValue=updated.split(“”).reverse().join(“”);//把它倒过来
问题是它会替换输入状态,但一旦更改就会重置输入状态,并且只会更改最后一次出现的输入状态。因此,我会在单击时执行此操作。假设用户键入一些内容,然后单击
Replace Template
按钮将$.text
和$.lang
替换为一些随机数。如果需要,可以插入特定的哈希或数字
const replaceTemplateByRandom = (val, temp) => {
while(val.indexOf(temp) != -1){
const numb = Math.floor(Math.random()*1000);
val = val.replace(temp, numb);
}
return val;
}
在这个arrow函数中,我运行while循环,直到找到要替换的模板,并用随机数替换出现的模板
const replaceTemplateByRandom=(val,temp)=>{
while(val.indexOf(temp)!=-1){
const numb=Math.floor(Math.random()*1000);
val=val.replace(温度、编号);
}
返回val;
}
功能应用程序(道具){
const[val,setVal]=React.useState('默认文本为$.text,语言为$.lang.);
const updateVal=(e)=>{
const newVal=e.target.value;
setVal(newVal);
}
常量替换模板=()=>{
设currentVal=val;
currentVal=replaceTemplateByRandom(currentVal,$.text');
currentVal=replaceTemplateByRandom(currentVal,$.lang');
setVal(currentVal);
}
返回
替换模板
;
}
ReactDOM.render(,document.getElementById('app'))代码>
您可以利用.replace()
接受的函数进行自定义和动态替换:
函数myHashFunction(匹配)
{
//取消对此行的注释以查看各种匹配项
//控制台日志(匹配);
//我只是返回一个随机数,你需要把它改成散列算法
返回Math.floor(Math.random()*Math.floor(99999999999));
}
let str=`我可能有多个$.text和$.lang,比如$.text和$.lang`;
log(str.replace(/\$\(?:text | lang)/g,myHashFunction))代码>函数myFunction(){
var theString=“你今天过得怎么样?”;
var splitString=theString.split(“$.you”);
var joinedString=“”;
对于(索引=0;索引
像这样简单的事情可能就可以完成这项工作。
因此,将字符串拆分为一个字符串数组,然后用一个特定的字符串将其连接回来。
没有具体的反应,但想法就在那里。那么您想在用户键入后立即用随机数替换$.text
和$.lang
?还是在“但是”事件上?是否单击submit?是的,当用户键入时。如果让用户键入一个句子,然后点击它的中间来键入<代码> $.text <代码>,那么它就应该被忽略了。我希望最终的输入状态没有任何$.text或$Lang.确切地说是散列是什么?散列可以产生$.text
或$.lang
字面意思吗?你是一个传奇!!我们可以快速聊天吗?除此之外,我还有一个小问题?很高兴它对您有效,如果我能帮助您,请告诉我。开始与您聊天我担心如果replaceAll
在旧浏览器中将失败?当我们将regex与global/g
replace
一起使用时,它会起作用。@DeepakSharma谢谢,我忘了Internet Explorer不支持replaceAll()
1)str
未定义,因此您的代码被破坏。2) Math.random()
应该每$执行一次。您
而不是将该值重新用于所有$。您
sSorry,我只给出一个大概的概念是多么粗鲁啊。编辑了我的答案。today?
在joinedString
function myFunction() {
var theString = "How are $.you doing $.you today?";
var splitString = theString.split("$.you");
var joinedString = "";
for(index = 0; index < splitString.length-1; index++){
joinedString += splitString[index] + Math.random();
}
document.getElementById("demo").innerHTML = joinedString;
}