所有大写字母和所有非字母字符的正则表达式是什么



我只需要所有非字母字符和大写字母的正则表达式。

let str = "ThisIs-an_example";

我应该使用什么正则表达式来使用arr.join正确地分隔单词,使其成为";这是一个例子";

您遇到了几个问题。首先,拆分不包括分隔符,所以如果你只拆分任何大写或非字母字符,那么你最终会丢失大写字母。(参见第一个示例)。

因此,您可以拆分非字母字符,也可以拆分后面的大写字符的零宽度断言(参见第二个示例),但最后一个字符串中的大小写有问题。如果你想处理这个问题,你就必须往回映射(见第三个例子)。

let str = "ThisIs-an_example";
let arr = str.split(/[^a-z]/);
console.log(arr);
arr = str.split(/[^A-Za-z]|(?=[A-Z])/);
console.log(arr.join(" "));
let cased = arr.map((a,i)=>{return i>0 ? a.toLowerCase() : a});
console.log(cased.join(" "));

还要注意,这将在包含的任何数字上进行拆分。如果希望数字出现,则必须修改表达式。

您可以对非字母字符split或大写字母的先行查找。

let str = "ThisIs-an_example";
let parts = str.split(/(?=[A-Z])|[^a-z]/);
console.log(parts);
console.log(parts.join(' ').toLowerCase());

TLDR

const regex = /[^A-Za-z]+|(?=[A-Z])/;
let str = `ThisIs-an_example`;
let arr = str.split(regex).map(s => s.toLowerCase());
console.log(arr.join(" "));

解释

Regex

CCD_ 2匹配"0"中的每一个非相位字符;A";至";Z";并且对于";a";至";z";。在这个例子中,它会发现"-"在第二";s";而第一个";a";。之后,它将找到"_"在字母"之间;n〃;以及";e";。

CCD_ 3匹配后面跟有来自";A";至";Z";,但不是这封信(我们想保留这封信)。在这个例子中;点";在字符串的开始和";T";。之后,它将找到";点";在字母"之间;s";以及";我";。

|匹配之前或之后的内容。在这个例子中,它将与前面解释的表达式相匹配。

+标记的表达式([^A-Za-z])将至少匹配一次。这将避免双重/混合的非多相字符(例如:"ThisIs-,.$$#@!(*&%33--an_example"),并且在拆分时不会给您空字符串。

拆分/小写

.map(s => s.toLowerCase())将确保数组中的所有字符串都是小写的。如果你想保留大写字母,就去掉它。

测试样品

  • 这是一个示例
  • this_is-A示例
  • 这是一个例子
  • this_is_an_example
  • 这是一个例子
  • 这是一个例子
  • 这是一个例子
  • 这个例子
  • 这个--是-一个--示例
  • 这是一个例子
  • this0000111112222示例
  • 这是-,.-$$###@!(*&%33--示例

所有这些样本都将使用给定的代码返回this is an example

类似的东西?

let str = "ThisIs-an_example";
let result = str.replace(/([A-Z])/g, ' $1').toLowerCase().trim().replace(/[^a-z]/g, ' ');

不是你想要的(数组),但完成了任务。

const regex = /[A-Za-z]([a-z]+)?/g;
const regexWithNumbers = /[A-Za-z0-9]([a-z0-9]+)?/g;
console.log('456-456_43265'.match(regex)) //                 null
console.log('456-456_43265'.match(regexWithNumbers)) //      ["456", "456", "43265"]
console.log('ThisIs-an_example'.match(regex)) //             ["This", "Is", "an", "example"]
console.log('ThisIs-an_example'.match(regexWithNumbers)) //  ["This", "Is", "an", "example"]
console.log('This0Is-an_example'.match(regex)) //            ["This", "Is", "an", "example"]
console.log('This0Is-an_example'.match(regexWithNumbers)) // ["This0", "Is", "an", "example"]
console.log('ThisIs-an_0example'.match(regex)) //            ["This", "Is", "an", "example"]
console.log('ThisIs-an_0example'.match(regexWithNumbers)) // ["This", "Is", "an", "0example"]
console.log('ThisIs-a0n_example'.match(regex)) //            ["This", "Is", "a", "n", "example"]
console.log('ThisIs-a0n_example'.match(regexWithNumbers)) // ["This", "Is", "a0n", "example"]
console.log('ThisIs-an_exa0mple'.match(regex)) //            ["This", "Is", "an", "exa", "mple"]
console.log('ThisIs-an_exa0mple'.match(regexWithNumbers)) // ["This", "Is", "an", "exa0mple"]

这个正则表达式似乎可以工作,但是你不能使用split方法,因为它会删除你从原始字符串中传递的字符,如果你不希望分割ThisIs之类的东西,这是可能的。

因此,使用String.proptotype.match()方法,它将返回一个具有匹配的数组

相关内容

  • 没有找到相关文章

最新更新