使用RegExp在特殊字符的位置对字符串进行子串

时间:2017-08-17 17:15:08

标签: javascript

假设我有这样的刺痛:ABC5DEF / G或它可能是ABC5DEF-15,甚至只是ABC5DEF,它可能更短AB7F,或AB7FG / H.

我需要创建一个包含子字符串的javascript变量,直到' /'或者' - '。我真的想用一组值来打破。我想也许可以尝试这样的事情。

{{1}}

但是这会返回一个错误:ReferenceError:找不到变量:array

我怀疑我是否错误地定义了我的阵列,但尝试了其他一些我不再成功的事情。

我做错了什么?

5 个答案:

答案 0 :(得分:1)

数组的定义不像JavaScript那样,定义它的最简单方法是:

var srcMark = ['/','-'];

此外,test是一个函数,因此必须这样调用:

whereAt = new RegExp(srcMark.join('|')).test(str);

请注意,test实际上并不会告诉您,正如您的变量所暗示的那样,它将返回true或false。如果要查找字符的位置,请使用String.prototype.search:

str.search(new RegExp(srcMark.join('|'));

希望有所帮助。

答案 1 :(得分:1)

您需要使用拆分方法:

var srcMark = Array.join(['-','/'],'|');  // "-|/" or
var regEx = new RegExp(srcMark,'g');      // /-|\//g
var substring = "222-22".split(regEx)[0]  // "222"
"ABC5DEF/G".split(regEx)[0]               // "ABC5DEF"  

答案 2 :(得分:1)

从我的问题中可以理解的是,在/[/-]/函数中使用此RegExp split()将起作用。

修改

要将字符串拆分为所有特殊字符,您可以在new RegExp(/[^a-zA-Z0-9]/)函数中使用split()

var arr = "ABC5DEF/G";
var ans = arr.split(/[/-]/);
console.log(ans[0]);

arr = "ABC5DEF-15";
ans = arr.split(/[/-]/);
console.log(ans[0]);

// For all special characters

arr = "AB7FG/H";
ans = arr.split(new RegExp(/[^a-zA-Z0-9]/));
console.log(ans[0]);

答案 3 :(得分:0)

如果您想要特殊字符(非字母数字)的位置,您可以使用与基本拉丁字母表中不是单词字符的任何字符匹配的Regular Expression。相当于[^ A-Za-z0-9_],即: \W



    var pattern = /\W/;
    var text = 'ABC5DEF/G';
    var match = pattern.exec(text);
    var position = match.index;

    console.log('character: ', match[0]);
    console.log('position: ', position);
    




答案 4 :(得分:0)

您可以将{regex与String.split一起使用。 它看起来像这样:

var result = ['ABC5DEF/G',
  'ABC5DEF-15',
  'ABC5DEF',
  'AB7F',
  'AB7FG/H'
].map((item) => item.split(/\W+/));

console.log(result);

这将创建一个包含字符串所有部分的数组,因此每个项目[0]将包含文本,直到/-或没有。