使用RegExp无法用零宽度空间替换空间

时间:2016-02-22 20:25:37

标签: javascript regex

我有这个字符串“میآییمومیرویم”。我想在“mi”(می)之后用零宽度空间替换空格。

这里的正则表达式在PHP中运行良好:

preg_replace("#((\s\x{0645}\x{06CC})+( )+([\x{0600}-\x{06EF}]{1,}){1,})#u", "$2\xE2\x80\x8C$4", $value, 1);

这里是javascript的正则表达式不起作用:

  pattern = /((\s\\x{0645}\\x{06CC})+( )+([\\x{0600}\-\\x{06EF}]{1,}){1,})/g;
  value = value.replace( new RegExp(pattern), "$2\xE2\x80\x8C$4" );

1 个答案:

答案 0 :(得分:2)

在JavaScript中,您需要使用\u0abc而不是\x{0abc}来表示Unicode字符。我还重构了PHP回溯参数($2$4)的使用,因为它们在JavaScript中不存在。



var str = `می آییم و می رویم`
var regex = new RegExp(/(\s\u0645\u06CC)+( )+([\u0600-\u06EF]{1,}){1,}/g)

matches = regex.exec(str);
document.write(str.replace(matches[1]+' '+matches[3],matches[1]+'\u200C'+matches[3]))