Rue*_*eta 206 javascript regex expression filter regex-greedy
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
和我的JavaScript代码:
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = 'abcd adddb';
var filterdata = takedata.match(/(\[.+\])/);
alert(filterdata);
//end write js
});
Run Code Online (Sandbox Code Playgroud)
我的结果是:[|cơthử|nghiệm|]thịtrường[| test2 |đâylàtestlần2|]chứngkhoán[|Mỹ| day la nuoc my |].但这不是我想要的结果:(.如何获得[文本]第1次和[演示]第2次?
我在互联网上搜索信息后完成了我的工作^^.我做这样的代码:
var filterdata = takedata.match(/(\[.*?\])/g);
Run Code Online (Sandbox Code Playgroud)
Asa*_*aph 452
非贪婪的正则表达式修饰符就像它们贪婪的反对部分,但?紧接着它们:
* - zero or more
*? - zero or more (non-greedy)
+ - one or more
+? - one or more (non-greedy)
? - zero or one
?? - zero or one (non-greedy)
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 35
你说贪婪是个问题是正确的:
--A--Z--A--Z--
^^^^^^^^^^
A.*Z
Run Code Online (Sandbox Code Playgroud)
如果你想匹配两者A--Z,你必须使用A.*?Z(?使*"不情愿"或懒惰).
但是,有时候有更好的方法可以做到这一点,例如
A[^Z]*+Z
Run Code Online (Sandbox Code Playgroud)
这使用否定的字符类和占有量词来减少回溯,并且可能更有效.
在你的情况下,正则表达式将是:
/(\[[^\]]++\])/
Run Code Online (Sandbox Code Playgroud)
不幸的是, Javascript正则表达式不支持占有量词,所以你只需要:
/(\[[^\]]+\])/
Run Code Online (Sandbox Code Playgroud)
* Zero or more, greedy
*? Zero or more, reluctant
*+ Zero or more, possessive
+ One or more, greedy
+? One or more, reluctant
++ One or more, possessive
? Zero or one, greedy
?? Zero or one, reluctant
?+ Zero or one, possessive
Run Code Online (Sandbox Code Playgroud)
注意,不情愿和占有量词也适用于有限重复{n,m}构造.
Java中的示例:
System.out.println("aAoZbAoZc".replaceAll("A.*Z", "!")); // prints "a!c"
System.out.println("aAoZbAoZc".replaceAll("A.*?Z", "!")); // prints "a!b!c"
System.out.println("xxxxxx".replaceAll("x{3,5}", "Y")); // prints "Yx"
System.out.println("xxxxxx".replaceAll("x{3,5}?", "Y")); // prints "YY"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106241 次 |
| 最近记录: |