Я использую JQuery. У меня есть строка с блоком специальных символов (начало и конец). Я хочу получить текст из этого блока специальных символов. Я использовал объект регулярного выражения для поиска в строке. Но как я могу сказать jQuery найти несколько результатов, если у них два специальных символа или больше?
Мой HTML:
<div id="container">
<div id="textcontainer">
Cuộc chiến pháp lý giữa [|cơ thử|nghiệm|] thị trường [|test2|đây là test lần 2|] chứng khoán [|Mỹ|day la nuoc my|] và ngân hàng đầu tư quyền lực nhất Phố Wall mới chỉ bắt đầu.
</div>
</div>
и мой код JavaScript:
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = 'abcd adddb';
var filterdata = takedata.match(/(\[.+\])/);
alert(filterdata);
//end write js
});
Мой результат: [| cơ thử | nghiệm |] thị trường [| test2 | 2ây là test lần 2 |] chứng khoán [| Mỹ | day la nuoc my |] . Но это не тот результат, которого я хочу :(. Как получить [текст] для времен 1 и [демо] для времен 2?
Я только что сделал свою работу после поиска информации в Интернете ^^. Я делаю код так:
var filterdata = takedata.match(/(\[.*?\])/g);
- мой результат: [| cơ thử | nghiệm |], [| test2 | lây là test lần 2 |] это правильно !. но я не очень понимаю это. Можете ли вы ответить на мой вопрос, почему?
?
по себе означает «один или ноль» (но это жадность!). Например,'bb'.replace(/b?/, 'a') //'ab'
и'bb'.replace(/c?/, 'a') //'abb'
c
не будет совпадать, но у вас есть?
, то есть0 or 1
, то оно будет соответствовать0 number of c characters
, следовательно, заменить его. Я понятия не имею, как это работает, потому что это не компилируется в любом движке регулярных выражений, который я пробовал 😢Вы правы в том, что жадность - это проблема
Если вы хотите совпасть с обоими
A--Z
, вам придется использоватьA.*?Z
(что?
делает*
«неохотно» или ленивым).Иногда есть лучшие способы сделать это, например,
Это использует отрицательный класс символов и притяжательный квантификатор, чтобы уменьшить возврат, и, вероятно, будет более эффективным.
В вашем случае, регулярное выражение будет:
К сожалению, регулярное выражение Javascript не поддерживает собственнический квантификатор, поэтому вам просто нужно сделать следующее:
Смотрите также
Краткое резюме
Обратите внимание, что неохотные и притяжательные кванторы также применимы к конструкциям с конечным повторением
{n,m}
.Примеры в Java:
источник
+
вместо двух.you can emulate atomic grouping with LookAhead. (?>a) becomes (?=(a))\1
Я верю, что это будет так
g
в конце означает глобальный, поэтому он не останавливается на первом матче.источник