簡體   English   中英

用一個正則表達式解析復雜的字符串

[英]Parse complex string with one regular expression

我怎樣才能從這個字符串中得到

genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990

這個

genre: [Drama, Comedy],
cast: [Leonardo DiCaprio, Cmelo Hotentot],
year: [1986-1990]

用一個正則表達式?

你不會從一開始就將它們放入 arrays,但如果順序始終保持不變,則可以對其進行解析。

var str = "genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990";
str = str.replace(/\+/g," ");

//Get first groupings
var re = /genre:\s?(.+)\scast:\s?(.+)\syear:\s(.+)/
var parts = str.match(re)

//split to get them into an array
var genre = parts[1].split(",");
var cast = parts[2].split(",");
var years = parts[3];

console.log(genre);

這可以使用一個正則表達式和replace function 的重載作為第二個參數來完成。 但老實說,我必須再用一個replace來去掉加號 ( + ) - 我用空格替換了它們 ( )字符:

var str = 'genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990';
str = str.replace(/\+/g, ' ');
var result = str.replace(/(\w+:)(\s?)([\w,\s-]+?)(\s?)(?=\w+:|$)/g, function (m, m1, m2, m3, m4, o) {
    return m1 + ' [' + m3.split(',').join(', ') + ']' + (o + m.length != str.length ? ',' : '') + '\n';
});

您可以在jsfiddle上找到完整示例。

您不能僅使用正則表達式來執行此操作,因為您正在嘗試解析(微小的)語法。

暫無
暫無

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

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