簡體   English   中英

根據多個分隔符拆分字符串

[英]Split a string based on multiple delimiters

我試圖通過引用How split a string in jquery with multiple strings as separator來根據多個分隔符拆分字符串

由於多個分隔符,我決定遵循

var separators = [' ', '+', '-', '(', ')', '*', '/', ':', '?'];
var tokens = x.split(new RegExp(separators.join('|'), 'g'));​​​​​​​​​​​​​​​​​

但我收到錯誤

Uncaught SyntaxError: Invalid regular expression: / |+|-|(|)|*|/|:|?/: Nothing to repeat 

如何解決?

正則表達式相關字符 +,-,(,),*,?

var x = "adfds+fsdf-sdf";

var separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
console.log(separators.join('|'));
var tokens = x.split(new RegExp(separators.join('|'), 'g'));
console.log(tokens);

http://jsfiddle.net/cpdjZ/

這應該有效:

var separators = [' ', '+', '(', ')', '*', '\\/', ':', '?', '-'];
var tokens = x.split(new RegExp('[' + separators.join('') + ']', 'g'));​​​​​​​​​​​​​​​​​

生成的正則表達式將使用正則表達式字符類: /[ +()*\\/:?-]/g

這樣你就不需要逃避任何事情。

以下將是完成同一件事的更簡單的方法。

var tokens = x.split(new RegExp('[-+()*/:? ]', 'g'));​​​​​​​​​​​​​​​​​

請注意-必須先出現(或被轉義),否則它會認為它是range運算符(例如az

我認為您需要轉義 +、* 和 ?,因為它們在大多數正則表達式語言中具有特殊含義

這是因為像+*這樣的字符在 Regex 中具有特殊含義。

|更改您的加入|\\ ,你應該沒問題,轉義文字。

如果您想基於多個正則表達式進行拆分並且不想編寫大的正則表達式,您可以使用replacesplit 像這樣:

 const spliters = [ /(\\[products\\])/g, /(\\[link\\])/g, /(\\[llinks\\])/g, ]; let newString = "aa [products] bb [link] [products] cc [llinks] dd"; spliters.forEach(regex => { newString = newString.replace(regex, match => `æææ${match}æææ`); }); const mySplit = newString.split(/æææ([^æ]+)æææ/) console.log(mySplit);

這對我的情況非常有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM