2015-09-05 4 views
-1

У меня динамический текст, который выглядит примерно такТекст Зачистка в JavaScript

my_text = "address ae fae daq ad, 1231 asdas landline 213121233 -123 mobile 513121233 cell (132) -142-3127 
      email [email protected] , sdasd [email protected] - [email protected]" 

Текст начинается с «адрес». Как только мы увидим «адрес», нам нужно очистить все оттуда, пока не появится «стационарная»/«мобильная»/«ячейка». Оттуда мы хотим очистить весь текст телефона (без изменения промежутков между ними). Мы начинаем с первого появления «стационарной»/«мобильной»/«ячейки» и останавливаемся, как только обнаружим «письмо». Наконец, мы очищаем часть электронной почты (без пробелов между ними)

«стационарный»/«мобильный»/«ячейка» может отображаться в любом порядке, а иногда некоторые могут не отображаться. Например, текст мог бы выглядеть так же.

my_text = "address ae fae daq ad, 1231 asdas 
      cell (132) -142-3127 landline 213121233 -123  
      email [email protected] , sdasd [email protected] - [email protected]" 

Там немного больше инженерной, что должно быть сделано, чтобы сформировать массивы подтекста, содержащиеся в адреса, телефоны и электронный текст. Подтексты адресов всегда разделяются запятыми (,). Подтексты писем могут быть разделены запятыми (,) или дефисами (-).

Мой вывод должен быть словарем JSON, который выглядит примерно так:

resultant_dict = { 
    addresses: [{ 
     address: "ae fae daq ad" 
    }, { 
     address: "1231 asdas" 
    }], 
    phones: [{ 
     number: "213121233 -123", 
     kind: "landline" 
    }, { 
     number: "513121233", 
     kind: "mobile" 
    }, { 
     number: "(132 -142-3127", 
     kind: "cell" 
    }], 
    emails: [{ 
     email: "[email protected]", 
     connector: "" 
    }, { 
     email: "sdasd [email protected]", 
     connector: "," 
    }, { 
     email: "[email protected]", 
     connector: "-" 
    }] 
} 

Я пытаюсь достичь эту вещь, используя регулярные выражения или любой другой путь в JavaScript. Я не могу понять, как написать это, поскольку я начинающий программист.

+0

Что такое 'sdasd'? внутри электронной почты? это даже действительный адрес электронной почты? –

+0

sdasd [email protected] - это идентификатор электронной почты, введенный пользователем, в котором есть ошибочное пространство. – user3422637

+0

мы можем сделать решение, обрезая пространство. Но я хотел бы получить все это с пространством, как по электронной почте – user3422637

ответ

1

Ваши требования немного искажены ... Множество для ключей карты, названия разделов в качестве ключа для каждого элемента ... Кроме того, что относительно выделенного массива для каждого «вида» телефона? Мы можем наверняка получить ожидаемый результат, но на первый взгляд это кажется бесполезным. Во всяком случае, здесь отправная точка:

var str = 'address ae fae daq ad, 1231 asdas landline 213121233 -123 mobile 513121233 cell (132) -142-3127    email [email protected] , sdasd [email protected] - [email protected]'; 
 

 
// find sections 
 

 
var s = 'address|landline|mobile|cell|email'; 
 
var reSections = new RegExp('(' + s + ').*?(?=' + s + '|$)', 'g'); 
 
var slices = str.match(reSections); 
 

 
document.body.innerHTML += (
 
    '<b>Step 1 - Find sections</b>' + 
 
    '<pre>' + JSON.stringify(slices, 0, 2) + '</pre>\n' 
 
); 
 

 
// make a map 
 

 
var map = { 
 
    address: [], 
 
    phone: [], 
 
    email: [] 
 
}; 
 

 
var reTrim = /^\s+|\s+$/g; 
 
var reSanitize = /\s+(-|,)\s+/g; 
 
var reSection = /^(\w+)(.*)$/; 
 

 
slices.forEach(function (section) { 
 
    var m = section.match(reSection); 
 
    var category = 'email address'.indexOf(m[1]) !== -1 ? m[1] : 'phone'; 
 
    var values = m[2].replace(reSanitize, ',').split(','); 
 
    map[category] = map[category].concat(values.map(function (value) { 
 
    return { kind: m[1], value: value.replace(reTrim, '') }; 
 
    })); 
 
}); 
 

 
document.body.innerHTML += (
 
    '<b>Step 2 - Make a map</b>' + 
 
    '<pre>' + JSON.stringify(map, 0, 2) + '</pre>\n' 
 
);

+0

'cell: {kind:" cell "}': D –

+0

@RokoC.Buljan Я знаю, поэтому я называю это «отправной точкой» x-D – leaf

-2

Немного хак решения, но работает. Попробуйте следующее: mymap = {}; a = str; keys = ["address", "cell", "landline", "email"]; для (var k in keys) {a = a.replace (ключи [ K], "##" клавиша + [K])}; console.log (a); b = a.split ("##"); for (var f in b) {x = b [f] .split (""); mymap [x [0]] = x. slice (1) .join ("")}; console.log (MyMap);

mymap будет содержать все поля, которые вы ищете. Вы можете разобрать его, чтобы создать JSON в своем формате.

Смежные вопросы