【问题标题】:How do I match any non-word character at the end of a line or just the end of the line如何匹配行尾或仅行尾的任何非单词字符
【发布时间】:2013-03-13 13:15:02
【问题描述】:

使用正则表达式,我想匹配行尾的所有非单词字符,或者,如果没有非单词字符,则匹配行尾。

这就是我认为应该如此简单的:

/\W*$/

即匹配零个或多个非单词字符,后跟行尾。

我在http://gskinner.com/RegExr/ 试过,但没那么简单。

然后,更进一步,我还想在行尾匹配空白,如下所示:

/[\W\s]*$/

即匹配集合中的零个或多个字符、非单词字符和空白字符,然后是行尾。

当然,这也不行。

在一天结束时,我想使用 javascript 将行尾的任何非字母数字字符替换为句号。

【问题讨论】:

  • 你也想替换换行符吗?因为$ 不匹配换行符,所以它匹配位置before \n。另一件事是 \s 已经包含在 \W 中,因为空格字符也是非单词字符。
  • \W*$ 是正确的。您是否选择了多行模式?如果你不这样做,$ 只会匹配字符串的末尾。
  • @AlanMoore 我现在看到了。我在 js 解释器中尝试过它,它工作得很好。另外,我不想匹配换行符,而且我没有使用多行模式。

标签: regex


【解决方案1】:

.replace 方法与直接正则表达式一起使用,而不是字符串。 ^ 是“非”字符。所以任何不是字母数字的东西。

var good = bad.replace(/[^\w]*$/g, "");

证明:

> bad = "asd$f   "
"asd$f   "
> bad.replace(/[^\w]*$/g, "")
"asd$f"

【讨论】:

  • 感谢“直接正则表达式”提示,我不知道。这个答案有效,除了我必须删除g,因为它会为找到的每个非单词替换一次。例如,尝试bad = "asdfa : . ",输出为asdfa??
  • 如果这是正确的,请接受我的回答。社区通过投票和接受的答案获得授权。谢谢。
【解决方案2】:

我的第一种方法是正确的。只是正则表达式工具表现不佳。

任一 /\W*$/

/[^\w]*$/

显然是一样的。

使用this jQuery 终端对其进行了测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多