2015-09-04 23 views
1

我需要一个正则表达式或任何其他方法来增加数字和字母之间的空格中的字符串之间的空白。JS字符串:添加数字和字母

例子:

"E2356" => "E 2356" 
"E123-F456" => "E 123-F 456" 

我已经能够找到它的正则表达式,但它是不可能的JavaScript:

(?<=[^0-9])(?=[0-9]) 

谢谢!

回答

3

匹配字母后跟数,用捕获基团的字母和数字二者,然后使用String#replace$1$2占位符来指代捕获基团的含量的两个字符序列,在它们之间具有空间。

str.replace(/([^0-9])([0-9])/g, '$1 $2') 
       ^^$1^^ ^^$2^ 

g标志确保所有出现被替换,当然。

5

取而代之的是向后看,只要符合非数字:

[^0-9](?=[0-9]) 

,并以 “& $” 代替。

[^0-9]子模式将匹配1个字符,该字符不是可以在替换模式中用$&(整个匹配的文本)引用的数字。 (?=[0-9])先行将确保它后面有一个数字。

参见demo

var re = /[^0-9](?=[0-9])/g; 
 
var str = 'E2356<br/>E123-F456'; 
 
var result = str.replace(re, '$& '); 
 
document.write(result);

+0

当然可以,但什么是在寻找反超的时候,你可以只匹配它,而不是数量的优势在哪里? – 2015-09-04 07:32:18

+0

@torazaburo:我不认为有任何优势。我只是应用了一个必要的改变,以使模式在JS中工作。其他更改不是必需的,但肯定有可能。我已经重申了我的答案,摆脱任何捕捉组织来保持它“更清洁”。 –

+0

@ArjunaWenzel:请检查我的答案,它是否适合你?这是一个真正的可惜的JavaScript不支持后视,但有很多变通没有那么糟糕,捕获/匹配进一步匹配处理在JS中非常方便(特别是当我们不需要重叠匹配时) 。在这种情况下,我们甚至不需要'replace'中的回调函数的任何复杂性,因为这个模式真的是“透明的”。 –

1

String#replace使用:

'E123-F456'.replace(/([A-Z])(\d)/g, '$1 $2') 
// >>> "E 123-F 456" 

$1$2是所捕获的组从正则表达式和用空格分开。该表达式假定您只有大写字符。请记住将g标志添加到您的表达式以替换每个出现的位置。

-1

下面的代码

var test = "E123-F456".match(/[a-zA-Z]+|[0-9]+/g); 
console.log(test.join(' ')); 

小提琴尝试http://jsfiddle.net/anandgh/h2g8cnha/

+0

这似乎既破坏连字符,也将空间放在错误的地方,如数字后面跟一个字母。你样品的结果是“E 123 F 456”。 – 2015-09-04 07:29:47

0

使用正则表达式不能格式化字符串。 正则表达式帮助您验证是否某些字符串遵循表达式描述的语言。

正则表达式可以帮助您捕捉不同的变量字符串的某些部分,然后根据你想获得所需的输出格式化。

所以我建议你做这样的事情:

var data = "E2304" ; 
var regex = ([^0-9])([0-9]*)/g ; 
data.replace(/regex, '$1 $2') ; 
+0

对,正则表达式不能创建或修改字符串,它们只能匹配。然而,当我真正需要的是“我需要一个正则表达式来与'replace'一起使用或者用来格式化这个字符串时,我需要一个正则表达式来格式化这个字符串”,几乎所有人都知道速记。 – 2015-09-04 07:44:36

相关问题