簡體   English   中英

正則表達式 - 替換逗號的所有奇數編號的出現

[英]Regex - replace all odd numbered occurrences of a comma

如果我有一個格式如下的字符串:

"name", "bob", "number", 16, "place", "somewhere" 

而我想要一個像這樣的字符串:

"name": "bob", "number": 16, "place": "somewhere" 

此外,測試用例確實有一些像這樣的字符串示例:

"name", "bob", "hello, world", true

這需要格式化如下:

"name" : "bob", "hello, world" : true

...每個奇怪的逗號都被冒號取代(只要逗號超出引號) ,地球上我將如何通過正則表達式做到這一點?

我通過Google找到了以下正則表達式: /(,)(?=(?:[^"]|"[^"]*")*$)/,':' ,它匹配第一個逗號實例。 我如何從那里交替每一個?

編輯以獲取更多信息:

我想要做的是取這個字符串,其中每個值都用逗號描述,並使用.replace()其格式化為JS對象。 因此,在這種情況下,“名稱”,“數字”和“地點”代表關鍵值。 它們不是固定的,這只是一個例子。

正則表達式:

,(.*?(?:,|$))

替換字符串:

:$1

DEMO

例:

> '"name", "bob", "number", 16, "place", "somewhere" '.replace(/,(.*?(?:,|$))/g, ':$1');
'"name": "bob", "number": 16, "place": "somewhere" '

更新:

如果字段名稱是逗號分隔,那么你可以嘗試下面的正則表達式,

> '"name", "bob", "hello, world", true'.replace(/("(?:\S+?|\S+ \S+)"), ("[^"]*"|\S+)/g, '$1: $2');
'"name": "bob", "hello, world": true'

你可以使用這個涵蓋所有匹配的正則表達式。

(?=(?:[^"]*"[^"]*")*[^"]*$)(,)(.*?,|)(?=.*?(?:,|$))

更換是: :$2

現場演示

substitude ([^,]+),([^,]+,)\\1:\\2全局應用一次。

它必須應用一次。 否則,除了最后一個之外,每一個都會變成:。

好的,這是一個更新的答案,(ab)使用JSON.parseJSON.stringify

function formatString(input) {
    var arr = JSON.parse('[' + input + ']'),
        result = '',
        i;

    for (i = 0; i < arr.length; i++) {
        result += JSON.stringify(arr[i]);

        if (i !== arr.length - 1) {
            if (i % 2 === 0) {
                result += ': ';
            } else {
                result += ', ';
            }
        }
    }

    return result;
}

示例: http //jsfiddle.net/w9eghqmy/1

 "(.*?)(?<=\")(\s*)\,(\s*)(\S+)"

替換為“\\ 1 \\ 2:\\ 3 \\ 4”

這適用於所有情況。

var str='"name", "bob", "hello, world", true';
str.replace(/("[^"]+"), ("[^"]+"|[^",]+)/g,"$1: $2");

正則表達式"[^"]+"的第一部分在引號下捕獲名稱:”name“或”hello,world“。

正則表達式的第二部分("[^"]+"|[^",]+)捕獲引號下的名稱或不帶引號或逗號的字符串:“bob”或true。

暫無
暫無

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

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