我使用的是jQuery。我有一个包含特殊字符(begin和end)块的字符串。我想要从那个特殊字符块中获取文本。我使用正则表达式对象进行字符串内查找。但是,当有两个或更多特殊字符时,如何告诉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 | 2|đy làtest lần 2| chứng khoán |Mỹ|day la nuoc My |test2。但这不是我想要的结果:(。如何获取时间1的文本和时间2的演示?
我刚刚在网上搜索了信息后完成了工作^^。我的代码是这样的:
var filterdata = takedata.match(/(\[.*?\])/g);
我的结果是:|cơthử|nghiệm|,|đ2|ơ?y làửlện 2|đisầ!但我真的不太明白这一点。你能回答我为什么吗?
发布于 2010-05-13 11:50:26
非贪婪的正则表达式修饰符就像它们的贪婪的对应物,但后面紧跟着一个?
:
* - zero or more
*? - zero or more (non-greedy)
+ - one or more
+? - one or more (non-greedy)
? - zero or one
?? - zero or one (non-greedy)
发布于 2010-05-13 12:00:13
你说得对,贪婪是个问题:
--A--Z--A--Z--
^^^^^^^^^^
A.*Z
如果想同时匹配两个A--Z
,就必须使用A.*?Z
( ?
使*
变得“不情愿”或懒惰)。
然而,有时有更好的方法来做到这一点,例如。
A[^Z]*+Z
这使用了否定的字符类和所有格量词,以减少回溯,并且可能更有效。
在您的示例中,正则表达式为:
/(\[[^\]]++\])/
不幸的是, Javascript regex不支持所有格限定符,所以你只能这样做:
/(\[[^\]]+\])/
另请参阅
懒惰的替代方案请参阅: An Alternative to
- [Flavors comparison](http://www.regular-expressions.info/refflavors.html)
快速总结
* 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
请注意,不情愿和所有格的量词也适用于有限重复{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"
发布于 2010-05-13 11:52:16
我相信会是这样的
takedata.match(/(\[.+\])/g);
末尾的g
表示全局,因此它不会在第一次匹配时停止。
https://stackoverflow.com/questions/2824302
复制相似问题