簡體   English   中英

我如何排除這個正則表達式中的空格匹配?

[英]How do i exclude the whitespace matches in this regex?

我有一個正則表達式,我用它來匹配我遇到的特定問題的前導0

正則表達式將反對的文本通常是類似於以下內容的數學問題: 5 + 3

然而,這些是生成的問題,有時它們帶有前導0 ,例如: 05 + 32

我知道解決這個問題的“正確”方法是修復傳入的數據,但另一方面我們也試圖做的是讓獲取這些表達式的消費代碼更難搞砸,所以我們還想消除那里的前導0

正則表達式如下:/([ /([^\\.\\d]|^)[0]+/g

我有一個測試字符串,這應該反對: 0000100001.23 + 009.00003 + 010005.00005

此正則表達式有效,但包括第二個和第三個數字之間的空格及其各自的+符號,如下所示: http : //regexr.com/3dd2t

我知道它正在按照我的要求做 - 包括任何非. 或數字字符在開頭或沒有前面的非0字符,在這種情況下包括空格。 如何修改此正則表達式以明確表示我不想包含前面的空格?

請注意,我不能使用負前瞻/后視,因為這將在 JavaScript 正則表達式引擎中工作,本質上是進入string.replace調用。

這可能不太理想,但由於String.prototype.replace可以將函數作為第二個參數,您可以使用嵌套replace調用:第一個將獲取整數(包括前導 0),第二個將刪除 0 .

 var problem = "0000100001.23 + 009.00003 + 010005.00005"; var fixed = problem.replace(/[\\.\\d]+/g, function (item) { return item.replace(/^0+/, ''); }); // or, shorter version: var fixed2 = problem.replace(/[\\.\\d]+/g, item => item.replace(/^0+/, '')); // Just for snippet output: document.write(fixed); document.write('<br />'); document.write(fixed2);

`

因為在 javascript 中工作並且用戶不能回頭看,我可能建議找到所有\\s[0]+並用空格替換,然后分別考慮您的邊緣情況。 在這種情況下,以 0 開頭的字符串。 所以像

string.replace(/\s(?=0)0+/g, ' ').replace(/^[0]+/, '')

希望沒有太多的邊緣情況,並且您不需要繼續進行替換。

所以我們正在做的是,我們不是只查找帶有前導空格的 0,而是捕獲空格 + 0 並用空格替換。 然后處理沒有空格的前導零的邊緣情況(在這種情況下,只是字符串的開頭)

編輯:

利用您的原始正則表達式,我們實際上可以采用相同的原則並利用替換中的最后一個捕獲變量

string.replace(/([^\.\d]|^)[0]+/g, '$1')

在這里它將用空格或起始字符(當強制為字符串時為空)替換零(未捕獲)

獲得所需結果的另一種正則表達式模式:

var str = "0000100001.23 + 009.00003 + 010005.00005 +002.0102 + 0809.0009";

console.log(str.replace(/(^[0]+([0-9.]+\b)|(\s)[0]+)/g, "$3$2"));
// "100001.23 + 9.00003 + 10005.00005 +002.0102 + 809.0009"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM