消极的外观为“简单”正则表达式而努力

时间:2013-11-28 17:15:54

标签: javascript regex

我正在尝试摆脱字符串中多余的点字符。 (JavaScript)

只有符合严格规则才允许使用点。

允许规则:(空格或无空)(1个字符a-z)。(空格或空格)

如果字符串中的任何点与此匹配,则必须用空格(仅点)替换点。

例如“”表示字符串开始/结束:

非法示例(MATCH)

  • "dd." =匹配
  • "d.d" =匹配

允许的示例(不匹配)

  • "d." =不匹配
  • " d." =不匹配
  • " d. " =不匹配
  • "d. " =不匹配

我能得到的最接近的是:

var string = "dd. d.d d. d. d.d d.dd";

var res = string.replace(/[.](?! |$)/g, ' ');

结果:"dd. d d d. d. d d d dd "

如果JavaScript支持负面看,我可能能够弄明白。 任何人都知道如何正确匹配?

4 个答案:

答案 0 :(得分:2)

也许您可以使用XRegExp,这会增加对负面看守(以及其他内容)的支持?

答案 1 :(得分:1)

要重新创建lookbehind,请反转字符串并使用lookahead。如果你需要两者,可以考虑匹配前向字符串上的前瞻和反向字符串上的lookbehind,找到匹配所在的位置。

或者,由于允许的情况只有一次出现点,检查模式是否匹配,如果没有则进行字符串替换。

if(!RegExp.test(string)) {
    string.replace(/[.]/g, ' ');
}

答案 2 :(得分:1)

您可能会发现用空格替换所有.要简单得多,然后重新解析字符串并在适用的位置添加点?

答案 3 :(得分:1)

您可以使用捕获组解决问题:

res = str.replace(/([^ ][a-z]|[^a-z]|^)\.|\.(?=[^ ])/g, '$1 ');