Javascript 从只发生一次的链接中查找字母的精确匹配
我创建了一些代码,根据链接中找到的语言添加一些文本,但是我在完全匹配语言方面遇到了问题,因为模式太简单了。我需要准确地找到.com之后的内容,而不是其他内容。我尝试了这个Javascript 从只发生一次的链接中查找字母的精确匹配,javascript,regex,Javascript,Regex,我创建了一些代码,根据链接中找到的语言添加一些文本,但是我在完全匹配语言方面遇到了问题,因为模式太简单了。我需要准确地找到.com之后的内容,而不是其他内容。我尝试了这个/.\/.\/.*?\/(\S{2})/gm表达式,但它并不完全是我想要的 //查找页面的url //const findUrl=window.location.href; 常量findUrl=”https://www.example.com/fr/Pages/examplefr.html"; 控制台日志(findUrl);
/.\/.\/.*?\/(\S{2})/gm
表达式,但它并不完全是我想要的
//查找页面的url
//const findUrl=window.location.href;
常量findUrl=”https://www.example.com/fr/Pages/examplefr.html";
控制台日志(findUrl);
常数langs=[{
模式:/en/,//严格地只查找en
文本:“用很长的英文文本替换现有文本”
},
{
模式:/fr/,//严格地只查找fr
文本:“我是法国人”
},
{
模式:/es/,//严格地只查找es
文字:“没有哈布罗西班牙人。”
}
];
让发现=错误;
for(设i=0;i
这里有一些文字
您好,请检查此代码段
工作原理
langs.map(e=>…)
findUrl.match(newregexp(
.com${e.pattern}.,“g”)
.filter(e=>!!e).pop()从数组中提取匹配值
const findUrl=”https://www.example.com/fr/Pages/examplefr.html";
常数langs=[{
模式:/en/,//严格地只查找en
文本:“用很长的英文文本替换现有文本”
},
{
模式:/fr/,//严格地只查找fr
文本:“我是法国人”
},
{
模式:/es/,//严格地只查找es
文字:“没有哈布罗西班牙人。”
}
];
常数结果=(
langs.map(e=>!!findUrl.match(新的RegExp(`.*\.com${e.pattern}.*`,“g”))?e.text:null.filter(e=>!!e).pop()
);
text.innerText=结果;
console.log(结果);
您可以使用类似于
/\.com\/(\w{2})\/
的正则表达式来获取语言并将其作为文本进行比较。如果langs
对象的格式为{[lang:string]:string}
,这将更容易
const findUrl=”https://www.example.com/fr/Pages/examplefr.html";
控制台日志(findUrl);
常数langs={
“en”:“用很长的英文文本替换现有文本”,
“fr”:“我是法国人”,
“es”:“hablo español.”,
};
if(!findLanguage())console.log(“未找到匹配项”);
函数findLanguage(){
var result=/\.com\/(\w{2})\/.exec(findUrl);
if(结果和结果[1]以langs表示){
log(“已找到匹配项!”);
document.querySelector(“#texts p”).textContent=langs[result[1];
返回true;
}
}
这里有一些文字
您可以从原始URL提取“lang模式”,并在数组中找到与此模式匹配的对象:
//查找页面的url
//const findUrl=window.location.href;
常量findUrl=”http://enmicasa.com/es/Pages/examplefr.com/fr";
控制台日志(findUrl);
常数langs=[{
模式:“en”,//严格地只查找en
文本:“用很长的英文文本替换现有文本”
},
{
模式:“fr”,//严格地只查找fr
文本:“我是法国人”
},
{
模式:“es”,//严格地只查找es
文字:“没有哈布罗西班牙人。”
}
];
const myLang=langs.find(obj=>findUrl.replace(/.*\.com\/(.+?)\/.*/,“$1”)==obj.pattern);
如果(米朗){
log(“已找到匹配项!”);
让findP=document.getElementById(“text”).queryselectoral(“p”);
findP[0]。innerText=myLang.text;
}否则{
log(“未找到匹配项”);
}
这里有一些文字
在if
语句中不需要!!
。最好使用some
而不是map
在找到第一个数据类型后立即停止。是的,但将任何数据类型(在本例中为数组)转换为布尔值是一种平滑的方法。这是一种(不必要的)但是普通过程。@nickzoumif块无论如何都会进行转换。不是我的下一票(只是重新访问此线程以删除我的答案,我的答案也被下一票)。不过,我可能会想出几个原因,说明你的帖子可能会被下一票,以及为什么它根本不是一个平滑的解决方案。使用match()
并将其输出转换为布尔值是一种过分的做法,有一个RegExp.prototype.test()
。另一个可能是事实,您使用map()
和filter()
不必要地迭代源数组两次,其中simplearray.prototype.find()
会更好地退出(第一个)循环,一旦(单张,如果回忆一下问题陈述)找到匹配项。还有一张是您的代码格式非常糟糕。这些提示不会删除那些否决票,但可能会帮助您避免进一步的否决票;)