我想通过从开头和结尾删除所有非字母数字字符来清理一些字符串。
它应该适用于这些字符串:
)&*@^#*^#&^%$text-is.clean,--^2*%#**)(#&^ --->> text-is.clean,--^2
-+~!@#$%,.-"^&example-text@is.clean,--^#*%#**)(#&^ --->> example-text@is.clean
我有这个正则表达式,它将它们从整个字符串中删除:
val.replace(/[^a-zA-Z0-9]/g,'')
如何将其更改为仅从字符串的开头和结尾删除?
答案 0 :(得分:9)
修改当前的 RegExp 以使用^
或$
指定字符串的开头或结尾,并使其变得贪婪。然后,您可以使用OR |
链接两者。
val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, '');
这可以简化为a-z
,所有字母都带有i
标记,数字为\d
val.replace(/^[^a-z\d]*|[^a-z\d]*$/gi, '');
答案 1 :(得分:4)
您需要使用锚点 - ^
和$
。而且,您需要一个量词 - *
:
val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g,'')
答案 2 :(得分:4)
使用锚点匹配字符串的开头和结尾:
val.replace(/^[^A-Z0-9]+|[^A-Z0-9]+$/ig, '')
答案 3 :(得分:1)
使用锚点^
和$
来匹配字符串中第一个字符之前和最后一个字符之后的位置。
val.replace(/(^[^A-Za-z0-9]*)|([^A-Za-z0-9]*$)/g, '');
您还可以使用\W
缩短代码,这意味着非字母数字字符,[^a-zA-Z0-9_]
的快捷方式,以防您想要保留下划线。
val.replace(/(^\W*)|(\W*$)/g, '');