用于 stings 的正则表达式过滤器,它接受 UTF-8 中的所有字母,但所有非字母字符除外,但 - (连字符除外)

Regex filter for stings that accepts all letters from UTF-8 with the exception of all non-letter characters but with the exception of - (hyphens)

提问人:Java wanna bee 提问时间:8/21/2022 更新时间:8/22/2022 访问量:212

问:

我会在 javascript 中过滤正则表达式过滤刺痛,即接受 UTF-8 中的所有字母的规则或一组规则,但所有非字母字符除外,但 - (连字符除外)

例如,传递过滤器是可以的:

abcd
ab-cd
müller
1248
ab99
straße
café
façade
São-Paulo
România
etc..

但不是非字母字符喜欢的例如:

!"§$%&/()=?`>°^_<|#'@, etc

我尝试了几种正则表达式的方法,但没有成功。 你能帮帮我吗

JavaScript UTF-8 正则表达式替换

评论


答:

1赞 The fourth bird 8/22/2022 #1

您可以将字母和数字与 unicode 标志匹配,如果连字符不应位于开头或结尾,可以选择重复该部分:[\p{L}\p{N}]+

^[\p{L}\p{N}]+(?:-[\p{L}\p{N}]+)*$

正则表达式演示

const regex = /^[\p{L}\p{N}]+(?:-[\p{L}\p{N}]+)*$/gmu;
const str = `abcd
ab-cd
müller
1248
ab99
straße
café
façade
São-Paulo
România
etc..
!
"
§
\$
%
&
/
(
)
=
?
\`
>
°
^
_
<
|
#
'
@
,
`;
console.log(str.match(regex));

评论

0赞 Java wanna bee 8/22/2022
谢谢!,看起来不错。我将在 javascript 中使用您的模式和 .replace(regex),我看到它不像您在 .match(regex) 示例中那样工作。您能否进行调整,以便也可以与replace()一起使用。
0赞 The fourth bird 8/22/2022
@Java 当前模式与整行上的单词匹配。您想使用 replace 完成什么?你能举个例子吗?
1赞 The fourth bird 8/22/2022
@Java 你的意思是反过来吗? regex101.com/r/4LNi6C/1[^\p{L}\p{N}-]+
1赞 Java wanna bee 8/22/2022
对于表情符号,我添加了这个 \p{So} 并且是工作。替换(/[^\p{L}\p{N}\p{So}-]+/gmu, “”);
1赞 The fourth bird 8/22/2022
@Java很高兴它对你有用:-)例如,在此页面上,您可以找到更多 unicode 类别 regular-expressions.info/unicode.html