我是正则表达式的新手。我试图使用JavaScript正则表达式从字符串中提取括号内的最后一个子字符串。它不适合我。相反,我在一对括号中得到第一个子串。有人能帮助我吗?
这是一个例子。我试图提取子字符串'xyz',但我得到'abc'。
var str1 = 'Hello World (abc)'; // May or may not contain parentheses
var str2 = '(xyz)'; // Definitely contains parentheses
var troublesomeString = str1 + ' ' + str2; // This is the string I'm working with
var result = myFunc(troublesomeString);
alert(result); // Should say 'xyz', but instead says 'abc'
...
function myFunc(troublesomeString) {
// Here I am trying to get '(xyz)', but am instead getting '(abc) (xyz)'
var resultArray = troublesomeString.match(/\(.+\)$/);
troublesomeString = resultArray[0];
// Here I am trying to get 'xyz', but am instead getting 'abc'
resultArray = troublesomeString.match(/[a-z]+/); // Adding a $ after + doesn't help
troublesomeString = resultArray[0]; // resultArray[1] is null
return troublesomeString;
}
答案 0 :(得分:3)
您正在匹配第一个“(”和最后一个“)”之间的所有内容,它必须以字符串结尾。
尝试使用此选项来匹配最后一组括号的内容(仍然必须根据'$'结束字符串):
var resultArray = troublesomeString.match(/\([^)]+\)$/);
答案 1 :(得分:1)
您需要添加\(
和\)
:
resultArray = troublesomeString.match(/\([a-z]+\)$/);
结果为["(xyz)"]
,请注意那里的$
。
如果你想要group
出一些东西,你应该将()
包裹起来:
resultArray = troublesomeString.match(/\(([a-z]+)\)$/);
请注意( )
对。
结果为["(xyz)", "xyz"]
你知道下一步该怎么做。
答案 2 :(得分:0)
尝试使用此正则表达式而不是您正在使用的第一个正则表达式:/\([^\(]+\)$/
。 ^\(
告诉它接受除(
之外的任何字符。
注意,您可以使用此网站http://regexpal.com/来帮助您构建和测试正则表达式。
答案 3 :(得分:0)
您需要使用“g”开关执行全局搜索。
这是一个有效的例子:
<script type="text/javascript">
var str = "test (abc) (xyz)";
var result = str.match(/\([^)]+\)/g);
alert(result[result.length - 1]);
</script>