我正在尝试摆脱字符串中多余的点字符。 (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支持负面看,我可能能够弄明白。 任何人都知道如何正确匹配?
答案 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 ');