regex - 如何创建过滤器来搜索具有特殊字符的单词,同时在没有特殊字符的输入中写入
问题描述
这是我的第一篇文章。我在 Quasar (Vue.js) 工作,我有一份工作清单,在这个清单中,我有一些特殊的词。
前任 :
[ ...{ "libelle": "Agent hôtelier" },{"libelle": "Agent spécialisé / Agente spécialisée des écoles maternelles -ASEM-"},{ "libelle": "Agriculteur / Agricultrice" },{ "libelle": "Aide aux personnes âgées" },{ "libelle": "Aide de cuisine" },...]
在“输入”上,我想搜索“Agent spécialisé”,但我想写“agent specialise”(没有特殊字符)或初始名称,我想写两者并自动完成我的“输入”。我只是没有找到添加到我的过滤器代码的解决方案......
我的输入:
<q-select
filled
v-model="model"
use-input
hide-selected
fill-input
input-debounce="0"
:options="options"
hint="Votre métier"
style="width: 250px; padding-bottom: 32px"
@filter="filterFn"
>
</q-select>
</div>
我的代码:
export default {
props: ['data'],
data() {
return {
jobList: json,
model: '',
options: [],
stringOptions: []
}
},
methods: {
jsonJobsCall(e) {
this.stringOptions = []
json.forEach(res => {
this.stringOptions.push(res.libelle)
})
},
filterFn(val, update) {
if (val === '') {
update(() => {
this.jsonJobsCall(val)
this.options = this.stringOptions
})
return
}
update(() => {
const regex = /é/i
const needle = val.toLowerCase()
this.jsonJobsCall(val)
this.options = this.stringOptions.filter(
v => v.replace(regex, 'e').toLowerCase().indexOf(needle) > -1
)
})
},
}
}
总结一下:我需要在我的输入中使用或不使用特殊字符进行过滤,以便在我的列表中找到可以包含特殊字符的作业。
我希望我很清楚,如果我还没有问过你的问题。
非常感谢你。
解决方案
我不确定它是否适合您,但您可以使用正则表达式根据您的需要创建有效的过滤器。例如,当有“e”字母时,您要检查“e”或“é”(如果我理解正确)
//Lets say we want to match "Agent spécialisé" with the given search text
let searchText = "Agent spe";
// Lets create a character map for matching characters
let characterMap = {
e: ['e', 'é'],
a: ['a', '@']
}
// Replacing special characters with a regex part which contains all equivelant characters
// !Remember replaceAll depricated
Object.keys(characterMap).forEach((key) => {
let replaceReg = new RegExp(`${key}`, "g")
searchText = searchText.replace(replaceReg, `[${characterMap[key].join("|")}]`);
})
// Here we create a regex to match
let reg = new RegExp(searchText + ".*")
console.log("Agent spécialisé".match(reg) != null);
另一种方法可能与此相反。您可以规范化“Agent spécialisé”。(我的意思是用上面的正则表达式用普通的 e 替换所有 é )并与原始文本一起存储在对象中。但是搜索这个规范化的字符串而不是原始字符串。
推荐阅读
- php - WordPress 模板中使用的嵌套 If else 语句不起作用
- azure-data-factory - 如何迭代 azure 数据工厂中 excel 文件中存在的所有 excel 工作表
- javascript - JS:总是得到空数组?
- swift - 在 viewCell,UIViewCollection 中使按钮可点击
- django - Google App Engine GitHub 操作:错误:位置 0 的 JSON 中的意外令牌
- clang - clang 不生成调试符号
- java - Junit 使用 coffeeMaker 练习测试用户输入
- go - 使用 Go iamcredentials 客户端 API 生成 Google API 访问令牌时出现 400 错误请求
- windows - 使用 Tortoisegit 在 C 盘中的 Commit Window 上“请稍候...”阶段需要很长时间
- azure - AzureDevops ARM 模板部署 - 确定是新的还是现有的