【问题标题】:regex to match entire unicode words which contains certain unicode character正则表达式匹配包含某些 unicode 字符的整个 unicode 单词
【发布时间】:2017-04-17 21:07:18
【问题描述】:

例如,匹配所有包含符号ь的西里尔字母

【问题讨论】:

标签: javascript regex


【解决方案1】:

一种可能的方法是拆分句子以分别获取每个单词,然后使用Array#filter 过滤掉包含指定字符的每个单词,在本例中为ь

var str = 'something else herь',
    res = str.split(' ').filter(v => v.indexOf('ь') > -1);
    
    console.log(res);

【讨论】:

  • 如果单词上“粘”了标点符号怎么办?顺便说一句,herь 在俄语中看起来非常有趣:)
  • @WiktorStribiżew 这是否意味着有问题?我只是随机输入的;p关于你的问题,你能给我举个例子吗,因为我真的不明白。
  • 检查Google Translate。还有一个示例:День,который запомнят все. - 您的解决方案将返回 2 个单词 День,который 作为一个条目。
  • @WiktorStribiżew 我可以检查字符串中是否有逗号,如果有,请再次拆分,但有什么意义呢? День,который запомнят все. 实际上标点符号不正确(逗号后应该有一个空格)。你是说白痴规则吗?
  • 重点是在需要获取整个单词时,不能在任意文本中用空格进行分割。
【解决方案2】:

如果您只需要西里尔字母,则必须使用
空白边界的。
单词边界将是一个非常的正则表达式。
请记住,西里尔文可以穿插拉丁文,所以我想它没有实际意义。

这将为您提供带有西里尔文字的
U+00044C ь CYRILLIC SMALL LETTER SOFT SIGN

/(?:\s|^)[\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E-\uFE2F]*\u044c[\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E-\uFE2F]*(?!S)/

展开

 (?: \s | ^ )
 [\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E-\uFE2F]* 
 \u044c 
 [\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E-\uFE2F]* 
 (?! S )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多