我用的是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ử| nghim |] th得胜trường [|test2|đây là test ln 2|] chcgng khoán [| m| day la nuoc My |]。但这不是我想要的结果:(。如何获得[文本]为时间1和[演示]为时间2 ?
我是在网上查了一下资料才开始工作的^^。我编写的代码是这样的:
var filterdata = takedata.match(/(\[.*?\])/g);
我的结果是:[c |ơthử| nghiệm |], [| test2 |đay拉测试lần 2 |)
这是对的!但我不太明白。你能告诉我为什么吗?
你说得对,贪婪是一个问题:
--A--Z--A--Z--
^^^^^^^^^^
A.*Z
如果你想匹配两个A- Z,你必须使用A *?Z (the ?使*“不情愿”,或懒惰)。
不过,有时有更好的方法来做到这一点,例如:
A[^Z]*+Z
这使用否定字符类和所有格量词,以减少回溯,并且可能更有效。
在你的例子中,正则表达式是:
/(\[[^\]]++\])/
不幸的是Javascript regex不支持所有格量词,所以你只需要做:
/(\[[^\]]+\])/
另请参阅
regular-expressions.info /重复
参见:懒惰的替代品
占有欲强的量词
口味比较
快速的总结
* 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"
你说得对,贪婪是一个问题:
--A--Z--A--Z--
^^^^^^^^^^
A.*Z
如果你想匹配两个A- Z,你必须使用A *?Z (the ?使*“不情愿”,或懒惰)。
不过,有时有更好的方法来做到这一点,例如:
A[^Z]*+Z
这使用否定字符类和所有格量词,以减少回溯,并且可能更有效。
在你的例子中,正则表达式是:
/(\[[^\]]++\])/
不幸的是Javascript regex不支持所有格量词,所以你只需要做:
/(\[[^\]]+\])/
另请参阅
regular-expressions.info /重复
参见:懒惰的替代品
占有欲强的量词
口味比较
快速的总结
* 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"