2013-11-28 77 views
1

我想擺脫字符串中多餘的點字符。 (JavaScript)負面後顧之外爲'簡單'正則表達式工作

點只允許符合嚴格規則。

允許的規則:(空格或沒有)(1個字符AZ)(空間或沒有)

如果在字符串中的任何點都與此不匹配,點必須用空格代替(只點)。

例如 「」 代表字符串的開始/結束:

非法實例(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

什麼是'串=您的期望輸出;' 「DD D.D d d D.D d.dd。」? – anubhava

+0

爲什麼'dd.'是一個比賽,但'd.'是不是? – Halcyon

+0

你能提供更多的多字符例子嗎?如果你有'dd'。 d.d d。 d。 d.d d.dd',它應該是什麼樣子? – brandonscript

回答

1

您可以用捕獲組解決的問題:

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

我接受你的答案作爲解決方案,因爲它完全符合我的要求,而不需要使用額外的代碼行。謝謝 :) –

2

也許你可以使用XRegExp,它增加了對負向lookbehinds(除其他事項)的支持嗎?

+0

我無法找到一個圖書館,謝謝! –

1

要重新創建向後看,請反轉字符串並使用lookahead。如果您同時需要,請考慮匹配前向字符串上的lookahead和反向字符串上的lookbehead,並找出匹配的地方。

或者,由於允許的情況只有一個點出現,請檢查該模式是否匹配,如果不是,則進行字符串替換。

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

您可能會發現很多簡單的更換所有.用空格,然後重新解析您的字符串,並在加點背適用?

+0

這實際上是一個簡單的方法來看問題,從來沒有想到這一點。謝謝! –