2016-12-13 4 views
0

В этом примере я хочу извлечь данную цену в строке.Извлечь слово в динамической строке

const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
 
const price = string.substring(string.lastIndexOf("$")+1,string.lastIndexOf(" ")); 
 
document.write(price);

выше метод не будет работать, потому что он выбирает последний индекс пространства (" ")

Как идти о получении места сразу после цены?


EDIT:

Строка может быть что-нибудь еще! Я не контролирую это, я просто хочу извлечь цену. В случае, если я этого не сделаю.

+0

Посмотрите на пробел, затем 'на' вместо этого. – edtheprogrammerguy

+0

Я не могу этого сделать, потому что предложение не всегда будет содержать слово «on» после цены. –

ответ

2

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

const re = /\$[\d,]+/ 
 
const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
 
const prices = re.exec(string); 
 
console.log(prices[0]);

Вы можете расширить шаблон, например, также соответствовать . - /\$[\d,.]+ (захватит «$ 5,000.25») или быть очень разрешительный, просто ничего, кроме пространства: /\$[^ ]+/ (будет захватывать «$ tonsofmoney»).

+0

Я принял ваш ответ, хотя я не упомянул конкретно. Динамическое предложение может содержать период '.' после цены. Я должен испачкать руки и изучать некоторые регулярные выражения, я думаю! –

2
const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
    const price =string.split('$')[1]//text after $ 
      .split(' ')[0];// text after $ and before space 
    document.write(price); 

const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
 
const price =string.split('$')[1].split(' ')[0]; 
 
document.write(price);

или

const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
 
    const price =string.match(/\$[0-9]*,[0-9]*/); 
 
//match $XXX,XXX in the string and estract it 
 
    document.write(price);

+0

Не могли бы вы вкратце объяснить, как работает вышеуказанный код? Спасибо EDIT: Второй способ не сработает! Как я уже упоминал, строка, данная мне, является динамической, означает, что каждый раз она будет не такой. –

+1

ok я обновлю ответ –

0

вы можете использовать string.split()

const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
 
const price = (string.split('$')[1]).split(' ')[0]; 
 
document.write(price);

это разбивает строку на первом индексе $ и занимает часть после $.
чем он разбивает строку при первом появлении пробела и принимает часть перед пространством.

Обратите внимание, что это ожидает, что в строке будет только 1 $ знак.

1

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

const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
 
var dollarPosition = string.lastIndexOf("$"); 
 
var nextSpace = string.indexOf(" ", dollarPosition+1); 
 
const price = string.substring(dollarPosition+1,nextSpace); 
 
document.write(price);

+0

Этот способ отлично работает для этого случая, спасибо за то, что он разбил его на шаги, теперь кажется ясным! –

2

Вы можете попробовать:

const string = 'I am a long sentence! My price is $5,000 on a discount!'; 
const price = (string.split("$")[1].split(" ")[0]); 
document.write(price); 
1

const string = 'I am a long sentence! My price is $5,000 on a discount!' + 
 
    'Another price: $120.'; 
 

 
var m = string.match(/\$[\d,]+/g); 
 
var i, price; 
 
if (m) { 
 
    for (i = 0; i < m.length; i++) { 
 
    price = m[i].replace('$', ''); 
 
    console.log(price); 
 
    } 
 
}

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