Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript正则表达式提取最后一个子字符串?_Javascript_Regex - Fatal编程技术网

如何使用JavaScript正则表达式提取最后一个子字符串?

如何使用JavaScript正则表达式提取最后一个子字符串?,javascript,regex,Javascript,Regex,我不熟悉正则表达式。我试图使用JavaScript正则表达式从字符串中提取括号内的最后一个子字符串。这对我不起作用。相反,我得到的是一对括号内的第一个子字符串。有人能帮我吗 这里有一个例子。我试图提取子字符串'xyz',但得到的却是'abc' var str1 = 'Hello World (abc)'; // May or may not contain parentheses var str2 = '(xyz)'; // Definitely contains parentheses var

我不熟悉正则表达式。我试图使用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;
}

您正在匹配必须以字符串结尾的第一个“(“和最后一个”)”之间的所有内容

请尝试此操作以匹配最后一组括号的内容(仍然必须按照“$”结束字符串):


您正在匹配必须以字符串结尾的第一个“(“和最后一个”)”之间的所有内容

请尝试此操作以匹配最后一组括号的内容(仍然必须按照“$”结束字符串):

初试 您需要添加
\(
\)

结果是
[(xyz)]
,注意那里的
$

最后一次尝试 如果你想把某件东西分组,你应该把它们包装起来:

resultArray = troublesomeString.match(/\(([a-z]+)\)$/);
请注意
()

结果是
[“(xyz)”,“xyz”]

你知道下一步该做什么。

先试试 您需要添加
\(
\)

结果是
[(xyz)]
,注意那里的
$

最后一次尝试 如果你想把某件东西分组,你应该把它们包装起来:

resultArray = troublesomeString.match(/\(([a-z]+)\)$/);
请注意
()

结果是
[“(xyz)”,“xyz”]


你知道下一步该怎么做。

尝试使用这个正则表达式而不是你正在使用的第一个正则表达式:
/\([^\(]+\)$/
^(
告诉它接受除
)之外的任何字符


请注意,您可以使用此网站帮助您构建和测试正则表达式。

尝试使用此正则表达式,而不是您正在使用的第一个正则表达式:
/\([^\(]+\)$/
^(
告诉它接受除
)之外的任何字符

请注意,您可以使用此网站来帮助您构建和测试正则表达式。

您需要使用“g”开关来执行全局搜索

下面是一个工作示例:

<script type="text/javascript">
    var str = "test (abc) (xyz)";
    var result = str.match(/\([^)]+\)/g);

    alert(result[result.length - 1]);
</script>

var str=“测试(abc)(xyz)”;
var result=str.match(/\([^)]+\)/g);
警报(结果[result.length-1]);
您需要使用“g”开关执行全局搜索

下面是一个工作示例:

<script type="text/javascript">
    var str = "test (abc) (xyz)";
    var result = str.match(/\([^)]+\)/g);

    alert(result[result.length - 1]);
</script>

var str=“测试(abc)(xyz)”;
var result=str.match(/\([^)]+\)/g);
警报(结果[result.length-1]);

小心。如果未找到匹配项,则结果将为
null
,尝试读取null的length属性将抛出错误,因此首先测试它:
警报(result&&result[result.length-1])在我的例子中,最后一组括号是保证存在的,所以这个解决方案是有效的。因为我无论如何都需要第二个正则表达式来删除括号,“g”开关与Shadow爬行器的类似解决方案相比没有任何好处(或造成任何伤害)。很高兴了解“g”如何不过,开关是可以工作的。实际上,我认为“g”开关有一个潜在的好处。与使用$不同,使用“g”开关意味着右括号不必是字符串中的最后一个字符。在我的例子中,它将是最后一个字符,但学习如何从右到左解析其他字符串是很好的。小心。如果没有找到匹配项,则结果将是
null
,尝试读取null的length属性将抛出错误,因此t首先测试它:
alert(result&&result[result.length-1]);
在我的例子中,最后一组括号是保证存在的,所以这个解决方案是有效的。因为我需要第二个正则表达式来移除括号,所以“g”开关没有比Shadow爬行器的类似解决方案增加任何好处(或造成任何伤害)。很高兴了解“g”如何不过,开关是可以工作的。实际上,我认为“g”开关有一个潜在的好处。与使用$不同,使用“g”开关意味着右括号不必是字符串中的最后一个字符。在我的例子中,它将是最后一个字符,但学习如何从右到左解析其他字符串是很好的。这个解决方案也很有效。当它前面有^This solution时,似乎不需要转义括号。它确实有效当前面有^@hawaijim时,你不需要转义括号,那么请随意标记它welcome@hawaiijim请随意标记,然后回答。;)…不客气