#javascript #regex #math #mathjax
#javascript #регулярное выражение #математика #mathjax
Вопрос:
Я использую регулярное выражение
/$([^$]*)$/g
чтобы заменить текст внутри двух $ на latex.
В javascript я использую
text.replace(/$([^$]*)$/g, function (str, match) {
return changeToTeX(match);
}
Это работает почти так, как должно, но, например, этот текст
Цена составляет от 400 до 500 долларов.
будет перепутано, потому что он считает, что его следует преобразовать 400 and
в latex, поскольку этот текст находится между знаками доллара.
Возможно, это невозможно исправить. Я только что проверил math.stackexchange.com который поддерживает то же поведение, когда текст внутри знаков доллара заменяется latex , но здесь возникает та же проблема, когда весь текст между знаками доллара интерпретируется как latex.
Комментарии:
1. Поскольку вы отметили это с помощью MathJax, обратите внимание, что препроцессор tex2jax в MathJax более сложный и также предлагает экранирование.
Ответ №1:
Если у вас есть только числа внутри $...$
, используйте
/$(d )$/g
где d
соответствует 1 или более цифрам. Шаблон внутри можно улучшить, чтобы он соответствовал любым числам (см. Сопоставление чисел с плавающей запятой с регулярным выражением).
Чтобы сопоставить все, кроме $
и пробелов, используйте
/$([^s$]*)$/g
Посмотрите эту демонстрацию регулярных выражений
Возможно, чтобы требовать только символы word после первого $
и перед последним $
, используйте
/B$b([^$]*)b$B/g
Комментарии:
1. @Tushar: это только в том случае, если числа в
The price is between $400 and $500.
должны совпадать. Я понимаю, что в этом предложении не должно быть совпадений.2. Кажется, это работает 🙂 Но если я напишу $ 2 2 $ с пробелом впереди или напишу $ frac {3} {4} $, это больше не будет работать
3. Ага, так каковы же тогда спецификации? Вы знаете, регулярное выражение может соответствовать только обычному тексту. Позвольте мне угадать: после первого может быть что угодно
$
, и перед завершающим может быть что угодно, кроме пробела$
? И нет$
между ними? Попробуйте/$(?![^$]*s$)([^$]*)$/
.