#javascript #regex
#javascript #регулярное выражение
Вопрос:
Дана тестовая строка:
<div class="comment-quoter">Comment by <strong>Tom</strong>
Я хочу изменить его на
[quote=Tom]
Я дошел до этого, но он не находит совпадений:
PostTxt = PostTxt.replace(new RegExp("<div class="comment-quoter">Comment by <strong>{(. ),}</strong>", "g"), '[quote=$1]')
Комментарии:
1. Не уверен, рекомендуется ли вообще делать это таким образом; это абсолютно негибко. Представьте, произошли ли некоторые изменения разметки из-за какого-либо другого кода javascript, или дополнительные пробелы привели бы к удалению регулярного выражения и т.д.
2. @Davin, это часть системы комментариев, это сложно, потому что люди вводят
[quote]rgrg[/quote]
, отправляют его, оно анализируется как HTML, затем, когда я редактирую комментарии, мне нужно изменить его, чтобы отобразить в исходном формате.
Ответ №1:
Попробуйте:
PostTxt = PostTxt.replace(new RegExp("<div class="comment-quoter">Comment by <strong>(. )</strong>", "g"), '[quote=$1]')
Круглые скобки обозначают $1
группу захвата, поэтому фигурные скобки и запятая будут соответствовать литералам и не нужны.
В зависимости от того, что вы ожидаете, вы можете сделать это менее жадным, более конкретно указав символы, которые вы подбираете для группы захвата:
(w )
будет соответствовать одному или нескольким буквенно-цифровым символам и вернет правильные соответствия, если у вас более одной кавычки во входной строке.
Комментарии:
1. Это тоже не соответствует, извините
2. Помните, что регулярные выражения являются жадными. Ваш съедает слишком много и завершится неудачей, если
PostTxt
будет содержать более одной цитаты .3. @Tom Gullen: Отличная работа! Я начал сомневаться в своем здравомыслии! 😀
4. @Jason спасибо, система гарантирует, что вложенных кавычек не будет.
5. @Jason McCreary: Я добавил обновление, чтобы обозначить этот факт, приветствую.
Ответ №2:
Если вы хотите сделать это без накладных расходов на явное создание нового объекта регулярного выражения (поскольку вы все равно его не сохраняете), просто сделайте это:
PostTxt = PostTxt.replace(/<div class="comment-quoter">Comment by <strong>(. )</strong>/g, '[quote=$1]');
Ответ №3:
PostTxt = PostTxt.replace(/<div class="comment-quoter">Comment by <strong>(. ?)</strong>/g, '[quote=$1]')