我正在尝试编写一个与<input>
中(555)
括号匹配的正则表达式,并将括号替换为空。但是,如果只有一个括号,则应该不匹配,例如在1 (555) 555-5555
中,或括号内有多于三个数字/字符,例如在1 555)555-5555
中。
我最好的尝试似乎就是这个
(6505552368)
但它只匹配并替换第一个括号,这没有多大帮助。非常感谢任何想法。
答案 0 :(得分:2)
如果您需要删除字符串中大约3位数的第一个括号,您可以使用
<script></script>
请参阅regex demo
<强>详情
s.replace(/\((\d{3})\)/, '$1')
- \(
文字符号(
- 第1组(后来称为(\d{3})
反向引用)$1
- 文字\)
)
- 对第1组的反向引用。或者,如果您只需要删除碰巧出现在零个或多个数字/空格之后的两个括号,请使用
$1
<强>详情
s.replace(/^([\d\s]*)\((\d{3})\)/, '$1$2')
- 字符串开头^
- 第1组(后来称为([\d\s]*)
):0+位数或/和空白$1
- \(
字符(
- 第2组捕获3位数字(\d{3})
- 文字\)
此处)
需要两个反向引用才能恢复$1$2
和(
之外的文字。
答案 1 :(得分:1)
不确定这是否是最好的正则表达式,但这样可行。
正则表达式:(?:^ |()(\ d {3})(?:) | $)
出于演示目的,我已将()
替换为_
。
var regex = /(?:^|\()(\d{3})(?:\)|$)/g;
var str = "1 (555) 555-5555 (1234), or (123 or 123)";
console.log(str.replace(regex, "_$1_"))
&#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);
我希望它有所帮助。