使用正则表达式匹配由标点字符分隔的单词

时间:2010-01-01 17:08:18

标签: javascript regex

示例字符串:

  

this!is.an?example

我想匹配:这是一个例子。

我试过了:

<script type="text/javascript">
   var string="this!is.an?example"; 
   var pattern=/^\W/g;
   alert(string.match(pattern));
</script>

5 个答案:

答案 0 :(得分:5)

试试这个:

var words = "this!is.an?example".split(/[!.?,;:'"-]/);

这将创建一个包含每个单词的字符串数组 如果要将其转换为单个字符串,并将单词用空格分隔,则可以调用words.join(" ")

编辑:您也可以在\Wstr.split(/\W/))上拆分,但这可能会匹配多于您想要的字符。

答案 1 :(得分:3)

我无法理解你为什么要明确地匹配,但如果你的目标是去除所有标点符号,那么这将有效:

var words = "this!is.an?example".split(/\W/);
words = words.join(' ');

\W将匹配除字母,数字和下划线之外的任何字符。

如果你想在下划线上分开,请使用:

var words = "this!is.an?example_with|underscore".split(/\W|_/);

答案 2 :(得分:0)

如果您只想匹配:

(\w|\.|!|\?)+

答案 3 :(得分:0)

如果要用空格替换所有标点符号,可以这样做:

var str = str.replaceAll([^A-Za-z0-9]," ");

这将替换所有非字母,带空格的数字。

答案 4 :(得分:0)

/^\W/g表示匹配第一个字符不是字母或数字的字符串

并且字符串"this!is.an?example"显然不以非字母或非数字开头。

请记住,^表示整个字符串的开头,而不是您想要匹配的字符串。而且还要记住,资本\ W是所有与小\ w无法匹配的东西。有了这个提醒你可能想要的是:

var string="this!is.an?example"; 
var pattern=/(\w+)/g;                   // parens for capturing

alert(string.match(pattern).join(' ')); // if you don't join,
                                        // some browsers will simply
                                        // print "[object Object]" 
                                        // or something like it