【问题标题】:Regex match() with javaScript Serbian Latin letters带有 javaScript 塞尔维亚拉丁字母的正则表达式 match()
【发布时间】:2021-01-07 16:58:29
【问题描述】:

我需要匹配文本以在客户端进行搜索。 我有:

 const regex = /zitiste/g;

我需要匹配它:

const place  = "žitište";
place.match(regex);

这会返回 false,同样在:

https://regex101.com/r/Tk7tKy/2

“zisite”与“žitište”不匹配

所以甚至可以将 z 与 ž 匹配?使用正则表达式。 我用正则表达式阅读了 100 页,但如果这可能的话,我无法理解。

【问题讨论】:

  • 我认为您必须使用 \x00-\x7F 范围的字符来查找字符串中的非 ascii 字符。如果我在该链接页面中输入 [\x00-\x7F]+ ,则表示有 2 个字符匹配 - ž 和 š
  • z 不会匹配ž,你想同时匹配zitistežitište吗?
  • 是的 m8.在我的数组中它是žitište,我想与 中的 zitište 和 žitište 匹配,我得到了这样的结果 const regex = new RegExp("(?:" + search.join("|") + ")", "gi");
  • 倾向于@T.J.克劳德的回答,这可能会有所帮助:stackoverflow.com/questions/1453171/…。当然它是为 Java 设计的,但借用这个概念应该不难。

标签: javascript regex


【解决方案1】:

您可以匹配z ž(与s/š 相同):

const regex = /[zž]iti[sš]te/gi;

现场示例:

const regex = /[zž]iti[sš]te/gi;
console.log("žitište".match(regex));
console.log("žitiste".match(regex));
console.log("Zitište".match(regex));
console.log("Zitiste".match(regex));
.as-console-wrapper {
    max-height: 100% !important;
}

[zž] 表示“zž。”

显然,对于您希望允许的任何其他字母,无论有无变音符号,您都会包含其他替代方案。

我希望您可以使用新的 Unicode 属性转义功能来搜索塞尔维亚文字中的任何内容,但它是 doesn't look like it gets its own category。 :-(

这是一个示例,您从输入中获取正则表达式,将其放宽以允许带有或不带有变音符号的字符(在这种情况下,只有您的问题中的 zs,但您会想要添加完整列表):

// The substitutions to make
const map = {
    "z": "[zž]",
    "ž": "[zž]",
    "s": "[sš]",
    "š": "[sš]",
};
document.getElementById("btn-check").addEventListener("click", function() {
    let rexText = document.getElementById("regex").value;
    rexText = rexText.replace(/[zžsš\\]/g, ch => map[ch] || ch);
    const rex = new RegExp(rexText, "gi");
    const text = document.getElementById("input").value;
    const result = text.match(rex);
    console.log(`Matching text "${text}" against ${rex}: ${result}`);
});
<div>
    <label>
        Regex:
        <input type="text" id="regex" value="zitiste">
    </label>
</div>
<div>
    <label>
        Input to match against:
        <input type="text" id="input" value="žitište">
    </label>
</div>
<input type="button" value="Check" id="btn-check">

【讨论】:

  • 我认为这不是 OP 在现实中想要实现的目标。这个例子只是归结为最低限度......也许OP的Q.已经有一个类似问题的答案(unicode提示),如RegEx with extended latin alphabet (ä ö ü è ß)
  • 这是一个很好的方向,但是, const regex = /zitiste/g;来自 ,它是动态的。我得到了这样的 const regex = new RegExp("(?:" + search.join("|") + ")", "gi");
  • @MilanDjekic - 您仍然可以在应用之前对其进行修改,为带有和不带有变音符号的字母添加松散匹配。
  • @MilanDjekic - 我添加了一个示例。 :-)
  • @MilanDjekic - 不用担心,不是为了代表。 :-) (有什么意义,大约 800k ? ;-) )希望有帮助!
猜你喜欢
  • 2018-03-22
  • 1970-01-01
  • 2013-11-25
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2018-09-15
相关资源
最近更新 更多