使用RegExp将括号与内部设置的字符数相匹配

时间:2017-07-31 10:03:32

标签: javascript regex

我正在尝试编写一个与<input>(555)括号匹配的正则表达式,并将括号替换为空。但是,如果只有一个括号,则应该不匹配,例如在1 (555) 555-5555中,或括号内有多于三个数字/字符,例如在1 555)555-5555中。

我最好的尝试似乎就是这个

(6505552368)

但它只匹配并替换第一个括号,这没有多大帮助。非常感谢任何想法。

4 个答案:

答案 0 :(得分:2)

如果您需要删除字符串中大约3位数的第一个括号,您可以使用

<script></script>

请参阅regex demo

<强>详情

  • s.replace(/\((\d{3})\)/, '$1') - \(文字符号
  • ( - 第1组(后来称为(\d{3})反向引用)
  • $1 - 文字\)
  • ) - 对第1组的反向引用。

或者,如果您只需要删除碰巧出现在零个或多个数字/空格之后的两个括号,请使用

$1

请参阅another regex demo

<强>详情

  • s.replace(/^([\d\s]*)\((\d{3})\)/, '$1$2') - 字符串开头
  • ^ - 第1组(后来称为([\d\s]*)):0+位数或/和空白
  • $1 - \(字符
  • ( - 第2组捕获3位数字
  • (\d{3}) - 文字\)

此处)需要两个反向引用才能恢复$1$2(之外的文字。

答案 1 :(得分:1)

不确定这是否是最好的正则表达式,但这样可行。

  

正则表达式:(?:^ |()(\ d {3})(?:) | $)

出于演示目的,我已将()替换为_

&#13;
&#13;
var regex = /(?:^|\()(\d{3})(?:\)|$)/g;
var str = "1 (555) 555-5555 (1234), or (123 or 123)";

console.log(str.replace(regex, "_$1_"))
&#13;
&#13;
&#13;

据我了解,@ Wiktor的答案更好。仍然保留我的答案作为参考。

答案 2 :(得分:0)

试试这个:^ \ d +(\ d \ d \ d)\ d + - ?\ d + $

在parantheses之后,它接受一个单号 - 并且在parantheses中只有3位数。

答案 3 :(得分:0)

我改变了一点Rajesh的解决方案,所以每个括号都不会被替换。

var patt = /\((\d{0,3})\)/g;
var str = '55 (555) 555-(55)55';
console.log(str.replace(patt, "$1"));

但如果你需要替换甚至嵌套的括号,它就无法解决。为此,您可以使用以下代码:

var patt = /\((\d{0,3})\)/g;
var str = '55 (5(5)(((5)))) 555-(55)55';
while(str.match(/\((\d{0,3})\)/g))
{
    str = str.replace(patt, "$1");
}
console.log(str);

我希望它有所帮助。