10

我有一些字符串要通过从开头和结尾删除所有非字母数字字符来清理。

它应该适用于这些字符串:

)&*@^#*^#&^%$text-is.clean,--^2*%#**)(#&^ --->> text-is.clean,--^2

-+~!@#$%,.-"^&example-text@is.clean,--^#*%#**)(#&^ --->> example-text@is.clean

我有这个正则表达式,它将它们从整个字符串中删除:

val.replace(/[^a-zA-Z0-9]/g,'')

我将如何将其更改为仅从字符串的开头和结尾删除?

4

4 回答 4

13

修改您当前的RegExp以使用 or 指定字符串的开头或结尾,^$使其变得贪婪。然后,您可以使用 OR 将两者链接在一起|

val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, '');

这可以简化为所有字母和数字a-zi标志\d

val.replace(/^[^a-z\d]*|[^a-z\d]*$/gi, '');
于 2013-08-15T10:24:55.703 回答
4

您需要使用锚点 -^$. 而且,你需要一个量词 - *

val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g,'')
于 2013-08-15T10:25:08.293 回答
4

使用锚点匹配字符串的开头和结尾:

val.replace(/^[^A-Z0-9]+|[^A-Z0-9]+$/ig, '')
于 2013-08-15T10:25:17.460 回答
2

使用锚点^$匹配字符串中第一个字符之前和最后一个字符之后的位置。

val.replace(/(^[^A-Za-z0-9]*)|([^A-Za-z0-9]*$)/g, ''); 

您还可以使用\W非字母数字字符来缩短代码[^a-zA-Z0-9_],如果您还想保留下划线,则可以使用快捷方式。

val.replace(/(^\W*)|(\W*$)/g, ''); 
于 2013-08-15T10:26:50.623 回答