使用Javascript中的正则表达式对字符串进行标记

时间:2011-12-09 06:32:19

标签: javascript regex string tokenize stringtokenizer

假设我有一个包含换行符和标签符号的长字符串:

var x = "This is a long string.\n\t This is another one on next line.";

那么我们如何使用正则表达式将此字符串拆分为标记?

我不想使用.split(' '),因为我想学习Javascript的正则表达式。

更复杂的字符串可能是这样的:

var y = "This @is a #long $string. Alright, lets split this.";

现在我想从这个字符串中只提取有效的单词,没有特殊字符和标点符号,即我想要这些:

var xwords = ["This", "is", "a", "long", "string", "This", "is", "another", "one", "on", "next", "line"];

var ywords = ["This", "is", "a", "long", "string", "Alright", "lets", "split", "this"];

6 个答案:

答案 0 :(得分:7)

以下是您提出的问题的一个例子:http://jsfiddle.net/ayezutov/BjXw5/1/

基本上,代码非常简单:

var y = "This @is a #long $string. Alright, lets split this.";
var regex = /[^\s]+/g; // This is "multiple not space characters, which should be searched not once in string"

var match = y.match(regex);
for (var i = 0; i<match.length; i++)
{
    document.write(match[i]);
    document.write('<br>');
}

<强>更新: 基本上,您可以展开分隔符字符列表:http://jsfiddle.net/ayezutov/BjXw5/2/

var regex = /[^\s\.,!?]+/g;

更新2: 一直只写信: http://jsfiddle.net/ayezutov/BjXw5/3/

var regex = /\w+/g;

答案 1 :(得分:2)

使用\s+标记字符串。

答案 2 :(得分:2)

exec可以遍历匹配以删除非单词(\ W)字符。

var A= [], str= "This @is a #long $string. Alright, let's split this.",
rx=/\W*([a-zA-Z][a-zA-Z']*)(\W+|$)/g, words;

while((words= rx.exec(str))!= null){
    A.push(words[1]);
}
A.join(', ')

/*  returned value: (String)
This, is, a, long, string, Alright, let's, split, this
*/

答案 3 :(得分:1)

var words = y.split(/[^A-Za-z0-9]+/);

答案 4 :(得分:0)

为了提取仅限字的字符,我们使用\w符号。这是否与Unicode字符匹配取决于实现,您可以use this reference查看您的语言/库的用例。

请参阅Alexander Yezutov关于如何将其应用于表达式的答案(更新2)。

答案 5 :(得分:0)

这是一个使用正则表达式组来使用不同类型的标记来标记文本的解决方案。

您可以在此处测试代码https://jsfiddle.net/u3mvca6q/5/

  public loadTasks() {

    this.taskServ.getAllTasks().subscribe(
      response => this.tasks = response,
    );

  }