[英]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
例:
> '"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'
substitude ([^,]+),([^,]+,)
到\\1:\\2
全局應用一次。
它必須應用一次。 否則,除了最后一個之外,每一個都會變成:。
好的,這是一個更新的答案,(ab)使用JSON.parse
和JSON.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;
}
"(.*?)(?<=\")(\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.