操纵JavaScript的括号子串匹配

时间:2009-11-04 22:23:28

标签: javascript regex

取自Mozilla's help page

的示例
<script type="text/javascript">
  re = /(\w+)\s(\w+)/;
  str = "John Smith";
  newstr = str.replace(re, "$2, $1");
  document.write(newstr);
</script>

是否有可能以任何方式直接进一步操纵子串匹配?例如,有没有办法在这里用一行代表史密斯这个词?我可以将$ 2中的值传递给大写并返回值的函数,然后直接在这里使用它吗?

如果不可能在一行中,是否有一个简单的解决方案可以将“John Smith”变成“SMITH,John”?

试图解决这个问题,但没有提出正确的语法。

3 个答案:

答案 0 :(得分:3)

你应该可以做这样的事情:

newstr = str.replace(re, function(input, match1, match2) {
    return match2.toUpperCase() + ', ' + match1;
})

答案 1 :(得分:1)

不,使用JavaScript的RegExp对象无法实现(单行)。 尝试:

str = "John Smith";
tokens = str.split(" ");
document.write(tokens[1].toUpperCase()+", "+tokens[0]);

输出:

SMITH, John

答案 2 :(得分:0)

您可以简单地提取匹配的子串并自行操作:

str = "John Smith";
re = /(\w+)\s(\w+)/;
results = str.match(re);
newstr = results[2].toUpperCase() + ", " + results[1];