Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript替换cyryllic中的单词(不是单词的一部分)_Javascript_Regex - Fatal编程技术网

Javascript替换cyryllic中的单词(不是单词的一部分)

Javascript替换cyryllic中的单词(不是单词的一部分),javascript,regex,Javascript,Regex,我需要在西里尔文字符串中找到一些西里尔文单词(只有单词,而不是另一个单词的一部分),并将它们替换为另一个。但我找不到解决这个问题的办法 在英语中,它起作用: 'Slipknot not NOT'.replace(/\bNot\b/gi, 'TEST') // Slipknot TEST TEST 但不是用cyryllic字符串: 'целине не НЕ'.replace(/\bНе\b/gi, 'TEST') // still 'целине не НЕ' 我知道“/b”不适用于西里尔语

我需要在西里尔文字符串中找到一些西里尔文单词(只有单词,而不是另一个单词的一部分),并将它们替换为另一个。但我找不到解决这个问题的办法

在英语中,它起作用:

'Slipknot not NOT'.replace(/\bNot\b/gi, 'TEST') // Slipknot TEST TEST
但不是用cyryllic字符串:

'целине не НЕ'.replace(/\bНе\b/gi, 'TEST') // still 'целине не НЕ'
我知道“/b”不适用于西里尔语。 我找到了这个解决方案:

'целине не НЕ'.replace(/\Не(?![A-я])/gi, 'ТЕСТ'); //"целиТЕСТ ТЕСТ ТЕСТ" when I want "целине TЕСТ ТЕСТ"

但是它替换了部分单词,我不需要替换部分单词。

JS中的单词边界
\b
不能用于检测Unicode字母的单词边界。它可以通过一个捕获组来实现,该捕获组包含与字符串或任何非单词(非俄语、非拉丁语、非数字、非下划线)字符开头匹配的替换项,并在单词后进行否定的前瞻性检查,检查是否缺少此范围。在替换部分中,我们需要使用
$1
反向引用恢复单词前面的匹配和捕获的文本


document.write('цццццццццццццццццц)。替换(/(^ A-ZА0-9ц)ц(?)([A-ZА0-9г0
西里尔文(此处为俄语)字母的范围不包括
ё
Ё
。您只使用俄语字母表吗?您需要模仿后面的外观:。对于您的情况,
。请替换(/(^[A-|])CharStyle(?[A-|])/gi,$1ect')
对不起。我只是看了一下规范,似乎ES6不支持Unicode简写语法。@nhahtdh:好的,我明白了,我还认为它包括了这个更改。@Stribizev谢谢,还有一个问题:如果我需要找到的不仅仅是“href”,而是后面带空格的“href”?那么,我认为任务更简单:
/(^[a-ZА-1071; 0-9])Бö(?=)/gi
。正向前瞻
(?=)
将在
之后需要一个空格(尽管空格不会被“消耗”,因为它是一个零宽度断言)。@Stribizev是的,它可以工作,但这不会取代结尾处的空白。“‘чччаааааааааааааааааа0-9ааааааааааа107